Backbone.js:在模型中呈现json数据

chhqkbe1  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(143)

好的,超级基本的 Backbone.js 问题--我一直在寻找这个问题,但是我太慢了,尽管有很多类似的问题,我还是没有找到。
无论如何,足够的自我鞭挞-为什么不呈现这一点?

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();
});

所以我希望在屏幕上看到JSON“Blahblah”,但我什么也没看到。JSON被正确地获取(我可以在Firebug控制台中看到成功的GET请求),我想我已经确保在尝试呈现数据之前获取了数据...
出什么问题了?控制台给我这个错误:“类型错误:(中间值). callback.call不是函数”
谢谢你!

aydmsdu9

aydmsdu91#

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

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

模型是否可能实际上没有变化?您可以尝试绑定到sync而不是change,看看是否有效。
你也渲染了两次。一次直接用this.homeView.render(),一次通过事件处理器。如果你真的想在initialize中获取模型,并绑定到change事件,你不需要直接渲染。
试试看能不能修好。

2mbi3lxu

2mbi3lxu2#

绑定时只需删除render方法中的括号:
this.model.bind('change', this.render, this);
此外,使用onlistenTo是比bind更好的方法。

nvbavucw

nvbavucw3#

我将按照以下方式构建 Backbone.js backbone :

var app = app || {};

app.Option.Model = Backbone.Model.extend({});

app.Option.Collection = Backbone.Collection.extend({       
   model : app.Option.Model,

   fetch : function(options) {     
       Backbone.Collection.prototype.fetch.call(this, options);
   },

   url : function() {
       return 'http://localhost:4711/api';
   },

   parse: function(response) { // this is the ajax call
      console.log(response);
   }
});

然后在View中调用fetch方法初始化:

app.Option.View = Backbone.View.extend({
    collection : app.Option.Collection,

    initialize : {
       this.collection.bind('reset', this.render, this); 
       this.collection.fetch();
    },

    render : {
       var results = this.collection.toJSON(); 
       console.log(results);
    }
});

当我需要调用一个Web服务时,这是我最小的 Backbone.js 框架。我还没有在本地测试过,但是这样代码就可以工作了。

相关问题