Backbone.js:在模型中渲染json数据

cs_*_*ckX 4 javascript json backbone.js

好的,超级基本的Backbone问题 - 我一直在寻找这个问题,但是尽管有很多类似的问题,我还是太慢了.请放心,我感到很惭愧.

无论如何,足够的自我鞭 - - 为什么不渲染?

var app = app || {};

app.Option = Backbone.Model.extend({
url: 'http://localhost:4711/api'

//This url contains the following JSON: {"title": "Blahblah", "author": "Luke Skywalker"};  
});

 app.View = Backbone.View.extend({

el: 'body',

initialize: function(){
    this.model.fetch();
    this.model.bind('change', this.render(), this);
},

render: function(){
    this.$el.html(this.model.get('title'));
    return this;
}

});


$(function() {

 var option = new app.Option();
    this.homeView = new app.View({   //Tried changing this to a standard var declaration but didn't work
      model: option
    });
    this.homeView.render();
});
Run Code Online (Sandbox Code Playgroud)

所以我期待在屏幕上看到JSON"Blahblah",但我什么都没看到.JSON正在被正确获取(我可以在firebug控制台中看到成功的GET请求),我想我确保在尝试渲染数据之前获取数据...

那有什么不对?控制台给我这个错误:"TypeError :(中间值).callback.call不是函数"

谢谢!

glo*_*tho 5

有一点是你this.render()在事件绑定中立即调用而不是仅仅绑定回调.这样做(使用listenTo最佳实践):

initialize: function(){
    this.listenTo(this.model, 'change', this.render);
    this.model.fetch();
}
Run Code Online (Sandbox Code Playgroud)

该模型可能实际上没有变化吗?您可能尝试绑定sync而不是change查看是否有效.

你也渲染了两次.一旦this.homeView.render()通过事件处理程序直接使用和一次.如果您确实希望保持模型获取initialize并绑定到更改事件,则不需要直接渲染.

与那些玩,看看是否不解决它.

  • 要清楚,最重要的部分是你的事件监听器中的`this.render()`应该是`this.render`. (3认同)