2015-04-08 44 views
0

我在尽力让自己绕过铆钉,但我需要做一些应该很简单的事情,我不太清楚如何去做。我有这个数据集,并且无论是在“行”还是在“行”中发生更改,我都需要立即将这些更改发送到服务器。Rivetjs Global onchange事件处理程序

对我来说看起来像一个常见的模式,但是我不能在没有作弊的情况下做到这一点。

这是我的解决方案迄今:

var data = { 
    rows: [ 
     {name: 'John', age: 30}, 
     {name: 'Mary', age: 29} 
    ] 
} 

var self = this 
    , valRoutine = rivets.binders['value'].routine; 
rivets.binders['value'].routine = function(el, value) { 
    var res = valRoutine.call(this, el, value); 
    self.doServerStuff(this.model); 
    return res; 
}; 

如何做好事件处理的铆钉?没有定义默认事件?我认为“onModel [add | change | del] Event”应该在框中,我是否错过了一些东西?可能是,但文档不帮助很多,它不容易找到示例,所以... =/

任何人都可以帮助吗?

啊,顺便说一下,关于如何让组件工作的样本,任何人?这是我遇到铆钉的主要原因之一。

谢谢!

回答

1

好了,找到一个更好的方法:

rivets.binders['update'] = { 
    bind: function(el) { 
     var self = this 
      , field = this.keypath 
     ; 

     this.callback = function() { 
      var page = self.observer.obj; 
      if (page.data.main.status == 'editing') { 
       var data = {row:{}}; 
       data[page.key] = page.data.main.row[page.key]; 
       data.row[field] = page.data.main.row[field]; 
       page.exec('update', { 
        data: data 
       }, this); 
      } 
     }; 

     $(el).on('change', this.callback); 
    }, 

    unbind: function(el) { 
     $(el).off('change', this.callback); 
    }, 

    routine: function(el, value) { 
    } 
}; 

然后,只是:

<input rv-update="my_field" rv-value="data.row.my_field"> 

我意识到,如果我赶上更新我的样子,在每个按键这将是调用服务器。