2012-08-22 33 views
0

我想將模型的待辦事項從TodoListView傳遞到TodoView。但它不能。我的代碼是這樣的。backbone.js無法將模型項目從集合的視圖傳遞到項目的視圖

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

我不明白爲什麼this.model.get( 「標題」)中TodoView輸出方法不明確的。你有什麼主意嗎?感謝提前。

+0

你爲什麼要呈現'TodoView'兩次?一旦進入'TodoView.initialize'並且一次進入'TodoListview.addTodo'。你可以從'initialize'方法中刪除它。 –

+0

你如何實例化'TodoListView'?它可能有助於查看該代碼。 – numbers1311407

回答

1

如果您檢查模型的屬性,您會得到什麼?

console.log(this.model.attributes) 

它有「title」屬性嗎?

此外,您可能想要爲render()綁定上下文。在初始化中:

initialize:function(){ 
    _.templateSettings.interpolate = /\{\{(.+?)\}\}/g; 
    _.bindAll(this, 'render'); 
      this.render(); 
    }, 
+0

我發現第0項不確定感謝你。 – nobinobiru

0

我的收藏已將項目設置爲未定義在0 idx。所以,它會導致錯誤。

我這段代碼解決...

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

感謝所有。

相關問題