2012-07-31 44 views
1

我這裏有這個樣本小提琴 - http://jsfiddle.net/pRteA/3/無法更新從下拉模式下使用knockout.js

的問題是,我必須拿出在下拉所選對象的「名稱」下,在跨度。 我是一些如何不能只爲SelectedUser對象做到這一點。我覺得這與鏈接到選擇的html標籤有關。

但是,我仍然能夠更新user.place對象,沒有任何問題。我無法找到2個對象初始化方式的主要區別。

而且,請注意,sampleUsers名單實際上是從服務器每次來作爲一個Ajax請求,這就是爲什麼我用這裏所描述的方法 - How to use knockout mapping?

JS:

var sampleUsers = [{ 
     Name: 'a', 
     Id: 1}, 
    { 
     Name: 'b', 
     Id: 2}, 
    { 
     Name: 'c', 
     Id: 3}, 
    { 
     Name: 'd', 
     Id: 4}, 
    { 
     Name: 'e', 
     Id: 5}]; 

    var userViewModel = { 
     user: ko.mapping.fromJS({ 
      place: { 
       country: undefined, 
       continent: undefined 
      }, 
      selectedUser: { 
       Name: undefined, 
       Id: undefined 
      } 

     }), 
     userOptions: ko.mapping.fromJS([]) 

    } 

ko.applyBindings(userViewModel); 
ko.mapping.fromJS(sampleUsers, userViewModel.userOptions);​ 

HTML :

<div> 
    <select data-bind="options: userOptions, optionsText: 'Name', value: user.selectedUser" class="grey-border"> 
    </select> 
</div>Update 

<div> 
    <span>Country</span> 
    <input type='text' data-bind="value:user.place.country" /> 
    <span data-bind='text:user.place.country'/> 
</div>  

<div> 
    <span>Continent</span> 
    <input type='text' data-bind="value:user.place.continent" /> 
    <span data-bind='text:user.place.continent'/> 
</div> 

回答

2

你有幾個語法錯誤和不當調用映射插件。我真的認爲你可能想再次通過tutorials

這是您的fixed fiddle

  1. 您修改綁定到它,這意味着在結合時它沒有屬性後userOptions「陣列」。
  2. 然後,在結合後,性能不會被subscirbed到,因爲你改變了對象的結構。
  3. 你爲你的跨度結合路徑不包括指定觀測所需的()
  4. selectedUser的屬性聲明爲內聯,但通過映射插件仍然構成。這太浪費了。小抱怨。
+0

Tyrsius,我已經更新了這個問題 - 主要是因爲我能夠以上述相同的方式很容易地更新其餘字段。我只是無法更新選定的用戶對象。請幫忙。 – Tushar 2012-08-01 07:20:07

+0

@TusharMathur我有點困惑。你的代碼仍然包含我指出的所有錯誤。你看着我發佈的小提琴嗎? – Tyrsius 2012-08-01 16:48:36

+0

我沒有發現任何「語法」錯誤,它似乎在視圖模型中的其他對象工作。我對淘汰賽的瞭解可能並不明確。我也看到了你的小提琴。問題是,在那裏,我沒有選擇用不同的值更新userOptions。我首先設置值然後綁定它。考慮一種情況 - model綁定到頁面加載的視圖,但顯示ajax請求返回的數據,數據也可以更改。 – Tushar 2012-08-01 17:34:50