2012-07-14 47 views
2

嘗試更新knockoutjs生成的列表中,當使用jQuery自動填充功能,並選擇一些可能的值。但是當我在Select方法中調用addItem函數時,list不會更新。預期的行爲是將所選項目值添加到knockoutjs items數組中。jQuery的autocomple和可觀察到的knockoutjs陣列

MVC3例如觀點:

<input type="text" id="Name"/> 

<h4>Items</h4> 
<ul data-bind="foreach: items"> 
    <li> 
     <span data-bind="text: $index"></span>: 
     <span data-bind="text: name"></span> 
     <span data-bind="text: code"></span> 
     <a href="#" data-bind="click: $parent.removeItem">Remove</a> 
    </li> 
</ul> 

<script type="text/javascript"> 
    $(function() { 
     var appViewModel = new AppViewModel(); 
     function AppViewModel() { 
      var self = this; 

      self.items = ko.observableArray([]); 

      self.addItem = function (name, code) { 
       self.items.push({ name: name, code: code }); 
      }; 

      self.removeItem = function() { 
       self.items.remove(this); 
      }; 
     } 

     $('#Name').autocomplete({ 
      minLength: 1, 
      delay: 500, 
      source: function (request, response) { 
       $.ajax({ 
        type: "POST", 
        url: "/Home/SearchItems", 
        dataType: "json", 
        data: { searchText: request.term }, 
        success: function (data) { 
         if (data != undefined) { 
          response($.map(data, function (item) { 
           return { 
            label: item.Name, 
            value: item.Name, 
            code: item.Code 
           }; 
          })); 
         } 
        } 
       }); 
      }, 
      select: function (event, ui) { 
       appViewModel.addItem(ui.item.value, ui.item.code); 
      } 
     }); 

     ko.applyBindings(new AppViewModel()); 
    }); 
</script> 

回答

2

這裏是一個工作版本:http://jsfiddle.net/jearles/vya7V/

你的問題是,你是在ko.applyBindings聲明實例化一個新AppViewModel,而不是傳遞appViewModel您先前實例並正在使用select

+0

謝謝,工作解決方案 – sulgpallur 2012-07-14 18:45:53

+0

我很樂意提供幫助。如果我的答案爲你工作,你應該投票,並將其標記爲接受的答案。 – 2012-07-14 20:20:58

+0

我會,但我沒有足夠的聲譽:) – sulgpallur 2012-07-17 14:51:04