• 那为什么区间 [0..@count] 中的@count就是类变量呢?难道是因为@coung声明的时候就是作为类变量声明的吗大哥

  • #3 楼 @kaka OK 了,果然的空格的问题 谢谢 哈哈哈哈哈

    大哥我再问下呗 我上面如果又在@makeTrouble中定义了一个变量@result,那这个@result是类变量还是实例变量呢?

    官网直接翻译成如下形式

    @makeTrouble:->
          @retult
    
    Tribble.makeTrouble = function() {
      return this.retult;
    };
    

    我感觉应该是类变量,但是这里看起来更像是实例变量

  • 回楼上前辈,这个问题我也注意到了 但仍然得不到书上的结果

    @makeTrouble:->
       @retult='Trouble!' for i in [0..@count].join(' ')
       console.log(@retult)
    

    列表解析会返回一个数组,数组中的每个元素都是'Trouble!' ,然后再用 join(' ') 将它们按字符串连接起来,再赋给变量@result,结果输出后只剩下一个'Trouble1'了 这回更懵了

    ps:我在类方法,makeTrouble 中新建的变量@result是不是也是类变量呢?'

  • 好好笑 at 2013年05月04日

    卧槽

  • 难道 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 鼻青脸肿的

  • #4 楼 @kaka 大哥 我感觉我和你写的一模一样啊 为啥你的就好使呢?

  • 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 了 费解

  • 很奇怪,Session 取值的问题 at 2012年04月27日

    @huacnlee 谢前辈