Javascript 主干.View.model.on(';更改:…';)仅触发一次
我正在通过模式窗口为post上传ajax文件,并在post中预览。每个帖子都有自己的模型和视图。模态窗口也是一个单独的视图,绑定到现有的DOM元素 单击post视图中的Javascript 主干.View.model.on(';更改:…';)仅触发一次,javascript,jquery,ajax,backbone.js,model-view-controller,Javascript,Jquery,Ajax,Backbone.js,Model View Controller,我正在通过模式窗口为post上传ajax文件,并在post中预览。每个帖子都有自己的模型和视图。模态窗口也是一个单独的视图,绑定到现有的DOM元素 单击post视图中的Attach按钮时,我从模式视图调用.open(),将post模型作为设置传递给模式视图: POST VIEW: ====================== ModalAttach.open({ postModel : this.model }); 上载模式视图中的文件时,我将服务器响应添加到传递的Post模型中,以便稍后
Attach
按钮时,我从模式视图调用.open(),将post模型作为设置传递给模式视图:
POST VIEW:
======================
ModalAttach.open({
postModel : this.model
});
上载模式视图中的文件时,我将服务器响应添加到传递的Post模型中,以便稍后在Post本身中将其呈现为预览:
MODAL VIEW:
======================
// file upload success
success: function(data) {
// if it's first call, set []
var imagesUploaded = self.postModel.get('images_uploaded') || [];
// add server response to array
imagesUploaded.push(data);
// rewrite current model array to new array
self.postModel.set({ 'images_uploaded' : imagesUploaded });
}
为了在post中呈现预览(在真正提交之前),我有一个函数
POST VIEW:
======================
renderUploadedImages: function () {
var self = this;
this.$uploadedImagesWrapper = this.$('.b-uploaded__images');
if (this.model.get('images_uploaded')) {
this.$uploadedImagesWrapper.empty();
this.model.get('images_uploaded').forEach(function (uploadedImage) {
self.$uploadedImagesWrapper.append(
uploadedImageTemplate({
'source': uploadedImage.source
})
)
});
}
}
为了触发图像渲染,我绑定了一个listner来跟踪model.images_上传的model.images被model视图更改的时间:
POST VIEW:
======================
initialize: function () {
this.addEvents();
this.renderUploadedImages();
},
addEvents: function () {
var self = this;
this.model.on('change:images_uploaded', function () {
self.renderUploadedImages();
})
},
问题是Post视图中的renderUploadedImages()
在首次上载时仅触发一次。未捕获其他更改(当postModel.get('images_uploaded')。长度变为2,3等时)。我做错了什么
谢谢。如果您喜欢:
var imagesUploaded = self.postModel.get('images_uploaded') || [];
// add server response to array
imagesUploaded.push(data);
// rewrite current model array to new array
self.postModel.set({ 'images_uploaded' : imagesUploaded });
第一次,如果您选中self.postModel.get('images\u uploaded')
,您会发现它未定义
,这就是为什么设置它时会触发事件更改:images\u uploaded
但是第二次调用success
方法时,您不会更改model属性,它总是指向同一个对象(数组),您只需更改数组值
如果我没有弄错的话,这是因为指针没有改变。这里可以使用收藏吗?然后可以利用
add
事件。