#3 楼 @kaka OK 了,果然的空格的问题 谢谢 哈哈哈哈哈
大哥我再问下呗 我上面如果又在@makeTrouble中定义了一个变量@result,那这个@result是类变量还是实例变量呢?
官网直接翻译成如下形式
@makeTrouble:->
@retult
Tribble.makeTrouble = function() {
return this.retult;
};
我感觉应该是类变量,但是这里看起来更像是实例变量
卧槽
难道 coffee>仅仅是用来在命令行中执行 coffeescript 的吗
我想我知道错在呢了
C:\>coffee odd.coffee
C:\>coffee
coffee>coffee odd.coffee
ReferenceError: odd is not defined
at repl:1:5
at REPLServer.replDefaults.eval (C:\Documents and Settings\Administrator\App
lication Data\npm\node_modules\coffee-script\lib\coffee-script\repl.js:28:28)
at repl.js:239:12
at Interface.<anonymous> (C:\Documents and Settings\Administrator\Applicatio
n Data\npm\node_modules\coffee-script\lib\coffee-script\repl.js:58:9)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:754:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.EventEmitter.emit (events.js:117:20)
coffee>
为什么在文件所在路径 用 coffee odd.coffee 就可用 换成 coffee>执行指令就不可行了呢
话说 coffeescript 还严格要求缩进吗?
我什么都没动 刚才还好用 然后再试 又报下面的错误
ReferenceError: odd is not defined
at repl:1:5
at REPLServer.replDefaults.eval (C:\Documents and Settings\Administrator\App
lication Data\npm\node_modules\coffee-script\lib\coffee-script\repl.js:28:28)
at repl.js:239:12
at Interface.<anonymous> (C:\Documents and Settings\Administrator\Applicatio
n Data\npm\node_modules\coffee-script\lib\coffee-script\repl.js:58:9)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:754:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.EventEmitter.emit (events.js:117:20)
哎我去了 弄死我吧
多谢楼上各位大哥 刚接触 coffee 鼻青脸肿的
odd=(num)->
if typeof num is 'number'
if num is Math.round num
if num > 0
num % 2 is 1
else
throw "#{num} is not positive"
else
throw "#{num} is not an integer"
else
throw "#{num} is not a number"
大哥你好 可能是我贴代码的时候排版没弄好 那个 else 是第二个 if 的
@hexawing 我就直接扔 public 里面了
好吧 我知道我栽在哪了 这里的 hash 取值只能 hash[“name”] 这样去 hash[:name] 取不到=。=瞄了个咪的
@vkill 疑?好像可以直接解析成 [ {"name"=>"jack","gender"=>"boy"}, {"name"=>"jack2","gender"=>"boy2"}, {"name"=>"jack3","gender"=>"boy3"}, ] 这回好像不是字符串了 我想是个 hash 数组,因为我直接输出会出错 但是我用 each 遍历仍然出错-。-
@vkill 因为传过来的数据是这样的:
@json='[
{"name":"jack","gender":"boy"},
{"name":"jack2","gender":"boy2"},
{"name":"jack3","gender":"boy3"},
]'
是个大字符串 所以我无法直接这样解析
@test=ActiveSupport::JSON.decode(@json)
所以我就糊涂了 想把里面的{"name":"jack","gender":"boy"} {"name":"jack2","gender":"boy2"} 分别拿出来分别进行 ActiveSupport::JSON.decode:) 我还在研究怎么劈字符串-.-
我想到的是把外面的' '去掉 然后当作数组进行 each 遍历 @json.each{|json| xxxxx }
前辈是怎么作的呢?:)
@clearJiang @bluecoda 谢谢二位 一直用 ajax 读后台的 json 数据 格式差不多的都能解析,等到 post 的时候我就怎么也想不起来还有格式要求了:)
我想到传过来的本身就是个有 json 对象组成的数组,所以我干脆遍历数组
@data=params[:data]
@data.each_index { |data|
hash=ActiveSupport::JSON.decode(data)
}
render :text=>"{success:true}"
但是一直错误 所以我试验了一下 ActiveSupport::JSON.decode()
def index
@hash= ActiveSupport::JSON.decode({id:1,name:'稳妥',descn:'哈哈'})
@test=@hash[:name]
end
在前台输出
<%=@test%>
结果错误提示:can't convert Hash into String:)
@raven 多谢啊 这是源码吗?看不太懂 我去研究研究
@lolychee 嘿嘿 谢谢 这是个好办法
-.-好吧 一时也找不到解决办法了 就先去掉 protect_from_forgery 凑合着用
@cantin 多谢前辈 问题和您说的一样,是 crsf_token 的问题,在提交一个 ajax 请求的时候,当请求方式为 post 的时候,rails 如果开启了 protect_from_forgery。那么在提交的 post 数据中就必须加入 token 这个字段来通过 rails 的后端验证。 在 rails3.0.4 以前的版本,没有提交 token 字段会报错,但是在以后的版本里面,rails 会自动重置 session 即 session 丢失。 我把 application_controller.rb 中的 protect_from_forgery 去掉就可以得到之前的 session 了 但我知道这也不是个办法:) 继续探索中
@cantin 哦?嘿嘿 我都不知道 crsf_token 是啥 我得去百度一下
Ext 改密码的表单 渲染在 student.html.erb 页面的 div 中
var password=new Ext.form.FormPanel({
defaultType:'textfield',
title:'更改密码',
frame:true,
url:'/student/changepw',
items:[{name:'op',fieldLabel:'原密码',allowBlank:false,inputType:"password"},
{name:'np1',fieldLabel:'新密码',allowBlank:false,inputType:"password"},
{name:'np2',fieldLabel:'确认密码',allowBlank:false,inputType:"password"},
{
xtype:'button',
text:'修改密码',
handler : function() {
password.getForm().submit({
success : function(password, action) { Ext.Msg.alert(action.result.msg1, action.result.msg2); },
failure : function() { Ext.Msg.alert('错误', '程序存在异常'); }
});
}
}]
});
麻烦前辈再给瞅瞅:) 都是一个 request 下来的 只不过登录后进行改密码,改密码的时候在 Ext 里写的 url 进行重定位,结果到重定位的方法里就得不到 session 了
Student的controller
class StudentController < ApplicationController
def student#学生的默认界面student.html.erb
end
def changepw
@op=params[:op]#原密码
@np1=params[:np1]#新密码1
@np2=params[:np2]#新密码2
if session[:account]
@test='OK' #我把业务代码都删除专门用这段判断出我的session没有值
else #因为我Ext的对话框一直蹦的是empty
@test='empty'
end
render :text=>"{success:true,msg1:'"+@test+"',msg2:'"+@test+"'}"
end
end
登录是用 Ext 作的界面
Ext.onReady(function() {
var form = new Ext.form.FormPanel( {
labelAlign : 'right',
title : '用户登录',
labelWidth : 50,
buttonAlign : 'center',
frame : true,
width : 220,
items : [ {
xtype:'textfield',
fieldLabel : '用户',
name : 'text1'
},{
xtype:'textfield',
inputType:"password",
fieldLabel : '密码',
name : 'text2'
}],
buttons : [ {
text : '登录',
handler : function() {
form.getForm().getEl().dom.action='/login/login';
form.getForm().getEl().dom.submit();
}
} ]
});
form.render("form");
});
Login 的 controller
class LoginController < ApplicationController
def index #显示登录页
end
def login
@username=params[:text1]
@password=params[:text2]
@account=Account.find_by_username_and_password(@username,@password)
if @account
session[:account]=@account#保存登录用户信息,再根据权限跳转相应页面
redirect_to :controller=>"teacher",:action => "teacher" if @account.power==1
redirect_to :controller=>"student",:action => "student" if @account.power==2
else
render :action => "error"
end
end
def error#显示错误页面
end
end
在公司带我的两个老师说应该是 Ext 重新发送请求的时候相当于又开了一个浏览器 (因为他们说 ext 的界面都是在 div 的层上的),所以我的 session 没了 但是他们说他们 50% 确定-.-当然那两个老师都是搞 java 的不会 rails 不也就不好问是不是 rails 和 java 的区别了
def changepw
@op=params[:op]#原密码
@np1=params[:np1]#新密码1
@np2=params[:np2]#新密码2
if session[:account]
@test='OK'
else
@test='empty'
end
render :text=>"{success:true,msg1:'"+@test+"',msg2:'"+@test+"'}"
end#函数结尾
Ext 的 alert 一直蹦的是 empty-.- 明明是在一个请求过程中的,为什么我的 session 么有了呢
Ext 改密码,这个表单渲染在 student.html.erb 的一个 div 标签中
var password=new Ext.form.FormPanel({
defaultType:'textfield',
title:'更改密码',
frame:true,
url:'/student/changepw',
items:[{name:'op',fieldLabel:'原密码',allowBlank:false,inputType:"password"},
{name:'np1',fieldLabel:'新密码',allowBlank:false,inputType:"password"},
{name:'np2',fieldLabel:'确认密码',allowBlank:false,inputType:"password"},
{
xtype:'button',
text:'修改密码',
handler : function() {
password.getForm().submit({
success : function(password, action) { Ext.Msg.alert(action.result.msg1, action.result.msg2); },
failure : function() { Ext.Msg.alert('错误', '程序存在异常'); }
});
}
}]
});
url 转发了一下请求 在 changepw 这个方法就读不到 session 了 费解
@huacnlee 谢前辈