Knockout observableArray推不起作用

时间:2014-08-20 13:16:55

标签: jquery knockout.js knockout-2.0

我有以下标记:

<table>
   <tr>
     <td style="padding-left: 150px;">
        <ul id="items" data-bind='foreach: Items'>
           <li>
              <span class="title" data-bind="text: $data.Title"></span>
            <li>  
      </td>
  </tr>
</table>

以下javascript:

$(function () { 
  var ViewModel = function () {
        var self = this;
        self.Items= ko.observableArray();

        self.arrayChanged = function (array) {
            $.each(array, function (i, obj) {
                self.Items.push(obj);
            });
        };
    };
    var viewModel = new ViewModel();
    ko.applyBindings(viewModel, $("#items")[0]);
    viewModel.arrayChanged($.parseJSON('@Html.Raw(Json.Encode(Model.Items))'));               
});

以上是我正在尝试做的简化版本。在上面

self.Items.push(obj);

不起作用,因为它无法在Items observableArray上推送新项目。我也尝试过使用

ko.utils.arrayPushAll(self.Experiences, obj);

无济于事。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用此

self.arrayChanged = function (array) {
    var arr = JSON.parse(array)    
    self.Items(arr)
};

将json转换为object,然后将对象数组传递给Items