2012-04-28 36 views
4

我試圖強制選擇選項標記視圖這是一個使用jQuery選擇器與attr函數的Backbone視圖的'multiple'='multiple'屬性,但我似乎無法讓它起作用。這是我的代碼:在Backbone.js視圖中更靈活的tagName

window.MyListView = Backbone.View.extend({ 

tagName:'select', 
    className: 'mySelect', 

initialize:function() { 
}, 

render:function (eventName) { 
    $(".mySelect").attr('multiple', 'multiple'); 
    _.each(this.model.models, function (myModel) { 
     $(this.el).append(new MyListItemView({model:myModel}).render().el); 
    }, this); 
    return this; 
} 

根本不工作。任何想法或任何其他方式呢?我會更好地創建一個只有一個選擇多個標記的新視圖,然後將myListItemView對象附加到它嗎?

多謝, 吉米

回答

9

有可能的,這是不工作的原因是,你的觀點是不附加到DOM還,所以$(「 mySelect」)未找到節點。

如果您想在視圖的render()方法中對視圖中的節點進行操作,那麼您需要使用視圖的el,Backbone中有幾個輔助程序可以執行此操作。

該助手將他們已經由是創造擺在首位的視圖代碼連接之前的DOM(最常見的視圖的節點上運行。

所以,你的代碼,添加多個屬性是

window.MyListView = Backbone.View.extend({ 

     tagName:'select', 
     className: 'mySelect', 

     initialize:function() { 
     }, 

     render:function (eventName) { 
      this.$el.attr('multiple', 'multiple'); 
      return this; 
     } 
    }); 
+0

謝謝德里克,謝謝埃德,謝謝你的回覆,我學到了更多的骨幹。 – 2012-04-29 07:07:43

10

您可以提供您想要使用「屬性」屬性視圖的標籤任意屬性:


Backbone.View.extend({ 
    tagName: "select", 
    attributes: { 
    "multiple": "multiple" 
    } 
}); 
+2

呵呵,我已經閱讀過這麼多次的文檔和源代碼了,不知何故我仍然錯過了這個。 – 2012-04-29 00:06:08

0

選擇'多個'問題現在已經解決了,但是我試着用this.collection.each(myItem)迭代......就像Ed建議的那樣,它看起來像是比下劃線更清晰的解決方案,但即使該項目在那裏它沒有提供任何視圖的項目:

/*_.each(this.model.models, function (myModel) {    
$(this.el).append(new MyListItemView({model:myModel}).render().el);  }, this); */ 

this.collection.each(function(myItem){ 
      console.log(myItem.id); 
      $(this.el).append(new MyListItemView({model:myItem}).render().el); 
    }); 

我去看的MyListItemView參數的狀態,但他們都OK。 有什麼想法? 謝謝