模型未更新Backbone.js

ebdffaop  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(166)

在我的 Backbone.js 项目中,我的模型在我在集合中调用'add'方法后没有更新。我不明白为什么。
我肯定我做了什么坏事,但我不知道是什么。
https://github.com/blured75/CardScores/blob/master/public/js/tweets.js
在我的视图的initialize函数上,我调用bind 'add'到这个.render(视图的)

initialize: function() {
            this.model.on('add', this.render, this);
},

在我的视图的渲染函数中,这个.model没有特定的属性,只有{length:1,型号:Array(1),_byId:{...},事件(_E):{...}}

render: function() {
    console.log('in render this.model', this.model);
    ...
}

用于#new-tweet的submit事件的函数调用良好,并且tweet对象填充良好:

The method $('#new-tweet').submit(function(ev) {
            var tweet = new Tweet({ author: $('#author-name').val(), status: $('#status-update').val()});   
            console.log('adding : ', tweet.toJSON());
            tweets.add(tweet);

            return false;
        });

除了使用旧的框架之外,您是否看到了一些错误?

iovurdzv

iovurdzv1#

【描述】
问题是,_.each的第一个参数必须是“list”。
作为您的console.log(this.model)在TweetsView中,虽然它是一个 Backbone.js 集合...
它是一个对象。

{
    length: 1, 
    models: Array(1), 
    _byId: {…}, 
    _events: {…}
}

使其不能正常工作。
[改进]
我提供两种方式:
1.使用Backbone.Collection的each函数。

this.model.each(function(tweet, i) {
    console.log(i);
    console.log(tweet); // Undefined ???
    console.log((new TweetView({model: tweet})).render().$el);
    self.$el.append((new TweetView({model: tweet})).render().$el);
});

1.因为this.model.models是数组,直接访问即可。

_.each(this.model.models, function(tweet, i) {
    console.log(i);
    console.log(tweet); // Undefined ???
    console.log((new TweetView({model: tweet})).render().$el);
    self.$el.append((new TweetView({model: tweet})).render().$el);
});

相关问题