Backbone.js:如何从View的范围外调用View的“方法”(例如:在模型的验证处理程序内)

时间:2012-01-24 04:26:40

标签: javascript backbone.js

基本上,我正在尝试这样做:

Person = Backbone.Model.extend({

   validate: { ... },

   initialize: function(){ 
      this.bind('error', ?......?); <== what do I put?
   },

   // I DON'T WANT TO CALL THIS ONE
   handleError: function(){ }

});


ViewOne = Backbone.View.extend({

   //I WANT TO CALL THIS ONE:
   handleError: function(model, error){ 
         //display inside segmented view using jQuery 
   };

});

我尝试了options.view.handleError,但它不起作用......

我的主要目的:我想要一个特定的View来创建模型来处理错误,而不是让模型全局处理它。例如,我希望View#1在我希望View#2显示在div中时发出警报。我不知道这是否是正确的做法。如果没有,我很乐意接受你的帮助。

谢谢。


更新:这是我的jsFiddle http://jsfiddle.net/jancarlo000/87mAk/

2 个答案:

答案 0 :(得分:6)

从Backbone 0.5.2开始,如果你需要传递上下文,建议删除bindAll以支持第三个绑定参数。

ViewOne = Backbone.View.extend({
    initialize: function() {            
        this.model.on('error', this.handleError, this);
    },
    handleError: function(model, error) { /* ... */ }
});
...
var person = new Person();
var viewone = new ViewOne({model : person});

这里的一般说明是,模型永远不应该知道他们的观点。只有视图应订阅模型事件。

答案 1 :(得分:3)

你向后看,视图应该绑定到模型的事件:

ViewOne = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'handleError');
        this.model.bind('error', this.handleError);
    },

    handleError: function(model, error) { /* ... */ }

});