Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干.View.model.on(';更改:…';)仅触发一次_Javascript_Jquery_Ajax_Backbone.js_Model View Controller - Fatal编程技术网

Javascript 主干.View.model.on(';更改:…';)仅触发一次

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模型中,以便稍后

我正在通过模式窗口为post上传ajax文件,并在post中预览。每个帖子都有自己的模型和视图。模态窗口也是一个单独的视图,绑定到现有的DOM元素

单击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
事件。