Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js模型未传递到视图_Javascript_Backbone.js_Backbone Boilerplate - Fatal编程技术网

Javascript Backbone.js模型未传递到视图

Javascript Backbone.js模型未传递到视图,javascript,backbone.js,backbone-boilerplate,Javascript,Backbone.js,Backbone Boilerplate,我从backbone.js开始,用backbone样板构建我的第一个项目 我有一个名为Navitem的模块,其视图名为侧栏: Navitem.Views.Sidebar = Navitem.Views.Layout.extend({ template: "navitem/sidebar", tagName: 'ul', beforeRender: function() { var me = this; this.options.navite

我从backbone.js开始,用backbone样板构建我的第一个项目

我有一个名为Navitem的模块,其视图名为
侧栏

Navitem.Views.Sidebar = Navitem.Views.Layout.extend({
    template: "navitem/sidebar",
    tagName: 'ul',
    beforeRender: function()
    {
      var me = this;
      this.options.navitems.each(function(navitem)
      {
        //insertView from Layout datatype
        me.$el.append(new Navitem.Views.Item({
          model: navitem //select the 'ul' in sidebar view and append an Item with model navitem
        }).render().el);
      });
      return this;
    }
  });
构建侧栏时,将向其中传递包含许多
Navitem.Model
的集合。调试后,
model:navitem
似乎工作正常,并将正确的
navitem
模型传递到
新的navitem.Views.Item({…})
。这个类看起来像:

Navitem.Views.Item = Navitem.Views.Layout.extend({ 
    tagName: 'li',
    template: 'navitem/default'
    events: {
      click: "navRoute"
    },
    navRoute : function()
    {
      app.router.go(this.model.get('target'));
      return this;
    }
  });
模板看起来像


出于某种原因,当我在第一个代码块中调用
Item.render()
时,它抱怨
model
在视图中未定义。我似乎不明白为什么会这样。有什么想法吗?

可能与这里的答案有关:

您需要将模型作为普通JSON传递给模板(除非您使用的是其他版本?)


希望这有帮助

我正在使用主干样板和主干布局管理器编写的程序中执行类似的操作

尝试向Navitem.Views.Item视图添加序列化函数:

// provide data to the template
serialize: function() {
    return this.model.toJSON();
}
然后在Navitem.Views.Sidebar的beforeRender函数中:

beforeRender: function(){
  _.each(this.options.navitems.models, function(model){
    var view = new Navitem.Views.Item({model: model});
    this.insertView(view);
  }, this);
}
navitem/default模板可以如下所示:

<%= label %>


这是未经测试的代码(使用您的视图和集合),但这样做对我来说很有效

不幸的是,事实并非如此。我发现这与backbone.layoutmanager有关。其他人似乎没有这个问题,我的代码看起来正确吗?您是否尝试过调试渲染函数?您的代码看起来是正确的,但如果您发布Navitem.Views.Layout类,我们可能会有更好的想法。