我在骨干方面遇到了一个非常有趣的问题,在我的一个观点中,我有这样的功能:
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();
};