0

モデルの todo アイテムを TodoListView から TodoView に渡したいです。しかし、それはできません。私のコードはこのようなものです。

    define(["jquery","underscore","backbone","todo_view","todo"],
function($,_,Backbone,TodoView,Todo){
    var TodoListview =  Backbone.View.extend({
    tagName: "ul",
    initialize:function(){
    _.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
    _.bindAll(this,"addTodo","render");
    this.collection.bind("add",this.addTodo,this);
                       this.collection.bind("reset",this.render,this);

                    },
    render:function(){
      this.$el.empty();
      this.collection.each(this.addTodo);
      return this;
      },
    addTodo:function(item){
      console.log(item.get("title"));
      // it's works correctly -> Backbone.model
      var todoView = new TodoView({model:item});
      var str = todoView.render().$el;
      this.$el.append(str);
      }
    });
    return TodoListview;
    });


// todo_view.js
define(["backbone","underscore"],function(Backbone,_){
    var TodoView = Backbone.View.extend({
            tagName: "li",
            template: "#todo-view-template",
            events: {
                "click .done": "toggleDone"
            },
            initialize:function(){
                _.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
                this.render();
            },
            render:function(){
                var str = $(this.template).html();
                var template = _.template(str,{name: "hello"});
                            console.log(this.model) //#-> Backbone.Model.
                            console.log(this.model.get("title")
                             //#-> undefined get method. why??
                return this;
            },
            toggleDone:function(){
            }
    });


    return TodoView;
});

TodoView の this.model.get("title") メソッドが undefined を出力する理由がわかりません。何か考えはありますか?よろしくお願いします。

4

2 に答える 2

1

モデルの属性を調べると、何が得られますか?

console.log(this.model.attributes)

「タイトル」属性はありますか?

さらに、render() のコンテキストをバインドしたい場合があります。初期化中:

initialize:function(){
   _.templateSettings.interpolate = /\{\{(.+?)\}\}/g;
     _.bindAll(this, 'render');
            this.render();
   },
于 2012-08-22T13:35:39.727 に答える
0

私のコレクションは、アイテムを 0 idx で undefined に設定しています。そのため、エラーが発生します。

私はこのコードで解決しました...

if (typeof this.model !== undefined){
 this.model.get("title");
 }

全てに感謝。

于 2012-08-22T13:54:32.667 に答える