2015-04-03 55 views
0

我有在Backbone.View Ajax请求change集合:Ajax请求后重新载入Backbone.View。如何?

change: function(model, options){ 
me = this; 
$.ajax({ 
    url: ajaxurl, 
    type: 'post', 
    data: { 
     action: 'getShortcode', 
     shortcode: model.attributes.shortcode 
    }, 
    success: function (data) { 
     me.$el.find('section:eq(' + model.collection.indexOf(model) + ')').replaceWith(data); 
     me.add(model, model.collection); 
    } 
}); 
} 

但是Ajax请求后,我的另一个Backbone.View(其中通过触发器调用这个AJAX)不要再工作,如何能够“重新加载”我的另一个Backbone.View之后的ajax,强制触发器再次调用ajax?谢谢!

+0

“改变模型”使用'$ .ajax'?你为什么不使用模型的方法?你的问题也太广泛了。骨干(和一般的JavaScript)基于_event_。您应该听取事件并相应地控制您的应用程序流程。 – undefined 2015-04-03 17:45:34

+0

@Vohuman对不起,你的意思是什么,不明白 – 20yco 2015-04-03 17:49:56

+0

@Vohuman再次对不起,我是变更集 – 20yco 2015-04-03 17:51:06

回答

2

您应该使用Backbone.Model。如果您的模型已经是Backbone.Model,那么只需使用model.set(anObjectWithTheChanges),这将在模型中触发change事件。

然后,只需在您的视图的initialize函数中添加一些代码以侦听模型中的更改。类似于:

this.listenTo(this.model, 'change', this.render); 

其中render是您在视图中负责刷新的方法。

+0

我想添加'this.listenTo(this.collection,“change”,this.change); ''在我的'Backbone.View'与触发器,并看到错误:'不能读属性'未定义的_listenerId' – 20yco 2015-04-03 18:12:24

+0

看来,收集可能没有被定义的时候你试图听它的事件。在调用'this.listenTo'之前,你在视图的'initialize'方法**中定义了this.collection吗? – CarlesAndres 2015-04-04 18:36:58