6

在 KnockoutJS 中,每次运行 AJAX 命令时更新 JSON 数据的 observableArray 的正确方法是什么?

现在,我正在使用 viewmodel.items([]) 之类的东西来清空数组,然后用来自服务器的 JSON 数据重新填充它。没有使用 KnockoutJS 映射插件(这可能是唯一的方法)正确的路径是什么?

我的服务器逻辑每次都会发送一些相同的数据,所以我不能只是迭代并将项目推送到数组中,除非我想要重复。

//// 添加我今天的做法 ////

我不确定我为什么要这样做,但这正是我最初想出如何更新的方式。所以基本上,就像我之前说的,我得到 JSON 数据,然后我把它传递给这样的东西:

    _model.addIncident = function (json) {
       var checked = json.UserTouches > 0 ? true : false;
       _model.incidents.push({
          id: ko.observable(json.IncidentIDString),
          lastTouchId: ko.observable(json.UserLastTouchIDString),
          weight: ko.observable(json.Weight),
          title: ko.observable(json.Title),
          checked: ko.observable(checked),
          createdOn: ko.observable(json.IncidentCreatedOn),
          servicename: ko.observable(json.Servicename),
          inEdit: ko.observable(false),
          incidentHistory: ko.observableArray(),
          matchScore: ko.observable()
      });
   };

对于 JSON 数组中的每个节点。正如你所看到的,我在那里有一些自定义的可观察对象,它们会随着每条传递的数据而构建。也许这是错误的方法,但到目前为止它的效果很好。

4

2 回答 2

10

observableArray 实际上只是一个普通的 observable,带有一些用于数组操作的额外方法。

所以,如果你想将 observableArray 的值设置为一个新数组,你可以这样做:

viewModel.items(myNewArray)

映射插件可以帮助您使用任何更新来更新数组中的现有项目。在这种情况下,您的 UI 只会根据任何差异进行更新。

于 2012-03-19T18:06:07.760 回答
-1

我知道我在这个问题上为时已晚,因为我最近发现自己陷入了这种情况。我们可以使用一个简单的 Javascript util 函数作为解决方法。

如果您已经标记_model.incidentsobservableArray,则在绑定返回的 JSON 数据时可以这样做:

eval("_model.incidents("+JSON.stringify(json)+");");

它对我有用。希望你已经像这样创建了你的 observable:

_model.incidents = ko.observableArray([]);
于 2013-06-20T03:45:57.657 回答