2013-11-03 139 views
0

我有一個observableArray添加ID在淘汰賽

self.workouts = ko.observableArray([ 
    {name: "Chest/Biceps", exercises:self.exercises1}, 
    {name: "Back/Triceps", exercises:self.exercises2}, 
    {name: "Legs/Shoulders", exercises:self.exercises3}, 
    ]); 

exercises1看起來是這樣的:

self.exercises1 = ko.observableArray([ 
    {name: "bench press", sets:self.sets}, 
    {name: "machine chest press", sets:self.sets1}, 
    {name: "standing biceps curl", sets:self.sets2}, 
    {name: "machine biceps curl", sets:self.sets3} 
]); 

我要的是一個獨特的id添加到每個對象exercises1然後將它綁定在我的看法。我試圖使用attr綁定,但沒有成功。

我的視圖看起來是這樣的:

<div class="content"> 
    <ul data-bind="foreach: workouts"> 
     <li class="name"><a class="name" data-bind="text:name"></a> 
      <ul class="hhide" data-bind="foreach: exercises"> 
       <li class="name_ex"><a data-bind="text:name"></a> 
       <div class="hhide"> 
        <input id ="weight" type="text" placeholder="weight(kg)"> 
        <span id="append">x</span> 
        <input id ="reps" type="text" placeholder="reps"> 
        <button id="sets" data-bind="click: $root.addSet">Add set</button> 
        <div data-bind="foreach: sets"> 
         <div id="sets" class="remove" data-bind="click: $root.removeSet">delete</div> 
         <div data-bind="visible: !editing(), text: name, click: edit"></div> 
         <input data-bind="visible: editing, value: name, hasFocus: editing" /> 
        </div> 
        </div> 
       </li> 
      </ul>  
    </ul> 
</div> 

謝謝!

回答

1

這是你在找什麼? (小提琴:http://jsfiddle.net/U7EFz/4/

HTML:

<div class="content"> 
    <ul data-bind="foreach: workouts"> 
     <li class="name"><a class="name" data-bind="text:name"></a> 
      <ul class="hhide" data-bind="foreach: exercises"> 
       <li class="name_ex"> 
        <a data-bind="text:name, attr:{id:uniqueId}"></a>                        
        | uniqueId: 
        <span data-bind="text:uniqueId"></span> 
       </li> 
      </ul>  
     </li> 
    </ul> 
</div> 

JS:

var VM = function(){ 
    var self = this; 
    var idCounter = 0; 
    self.getId = function(){   
     return "id" + (++idCounter); 
    } 

    self.exercises1 = ko.observableArray([ 
     {name: "bench press", uniqueId:"id1"}, 
     {name: "machine chest press", uniqueId:"id2"}, 
     {name: "standing biceps curl", uniqueId:"id3"}, 
     {name: "machine biceps curl", uniqueId:"id4"} 
    ]);  

    self.workouts = ko.observableArray([ 
     {name: "Chest/Biceps", exercises:self.exercises1}, 
     {name: "Back/Triceps", exercises:self.exercises1}, 
     {name: "Legs/Shoulders", exercises:self.exercises1}, 
     ]);  
} 

ko.applyBindings(new VM()) 
+0

是的,但它不是那麼好使用隨機ID爲每個運動。我想有能力設置特定的ID。比如: '{name:「臥推」,id:「ex1」}, {名稱:「機器胸部按」,「ex2」}'等等。 – Yuriy

+0

用Id計數器更新。像這樣? – pax162

+0

好吧,它似乎是一個解決方案,但不可能像我每個'name'一樣添加一個Id嗎?就像給自己寫一個ID到每個練習,而不是從一個函數生成它? – Yuriy