我在骨干方面遇到了一个非常有趣的问题,在我的一个观点中,我有这样的功能:
addpeople :function(){
        var authArray = _.clone(this.model.get("authorizedUsers"));
        var values = $(".add-input").val().split(",");
        values.forEach(function(value) {
            authArray.push(value);
        });
        this.model.set("authorizedUsers" , authArray);
        this.model.save();
    },
单击按钮时会调用此函数。这个版本的函数触发了一个change事件,因为我正在克隆我的数组,但由于某种原因this.model.save()永远不会被调用,也就是服务器永远不会收到 PUT 请求。当我刷新页面时,我回到模型的旧状态..
但是,如果我不克隆数组并将函数更改为,则:
addpeople :function(){
        var authArray = this.model.get("authorizedUsers");
        var values = $(".add-input").val().split(",");
        values.forEach(function(value) {
            authArray.push(value);
        });
        this.model.set("authorizedUsers" , authArray);
        this.model.save();
    },
这次 PUT 请求发送成功,但是页面没有重新渲染,因为没有触发 change 事件。当我刷新页面时,我可以看到更新的模型..
我知道我可以在第二个示例中手动触发更改事件,但我更好奇为什么this.model.save()在第一个示例中没有调用 my ..
为了帮助您更多地理解问题,我的模型看起来像:
var PostModel = Backbone.Model.extend({
    urlRoot : '/tweet',
    idAttribute: '_id',
    defaults:{
        name: '',
        comments: [],
        tags: [],
        authorizedUsers: [],
        postedBy : '',
        dateCreated: ''
    },
});
我的 node.js 更新函数如下所示:
exports.updateTweet =  function(req,res){
  console.log("Getting called ! ")
  var update = req.body;
  var id = req.url.split("/")[2];
  Post.update({ _id: id }, { $set: { authorizedUsers: req.body.authorizedUsers }}, function (err, post) {
      if (err) return handleError(err);
  });
  res.end();
};