Javascript 敲除JS-修改observableArray中项目的属性
我试图更新显示为红色的数字,以反映当一个项目被重新定位时,每个项目在observableArray中的位置。您可以在此处查看我的当前代码: 它的行为不像我期望的那样。我觉得这是因为数组中的项目及其属性本身是不可观察的 但我不太确定如何让它起作用Javascript 敲除JS-修改observableArray中项目的属性,javascript,jquery,.net,asp.net-mvc,knockout.js,Javascript,Jquery,.net,Asp.net Mvc,Knockout.js,我试图更新显示为红色的数字,以反映当一个项目被重新定位时,每个项目在observableArray中的位置。您可以在此处查看我的当前代码: 它的行为不像我期望的那样。我觉得这是因为数组中的项目及其属性本身是不可观察的 但我不太确定如何让它起作用 ko.bindingHandlers.sortable.afterMove = function () { self.adjustOrder(); }; self.adjustOrder = function () { for (
ko.bindingHandlers.sortable.afterMove = function () {
self.adjustOrder();
};
self.adjustOrder = function () {
for (var i = 0, j = self.items().length; i < j; i++) {
self.items()[i].sortOrder = i;
};
};
ko.bindingHandlers.sortable.afterMove=函数(){
self.adjustOrder();
};
self.adjustOrder=功能(){
对于(var i=0,j=self.items().length;i
这一点在
关键点:observableArray跟踪阵列中的对象,
不是这些对象的状态
简单地将一个对象放入observableArray并不能使所有
那个物体的属性本身是可以观察到的。当然可以
如果你愿意的话,让这些属性可以被观察到,但这是一个问题
独立选择
因此,您需要使您的sortOrder
propertiesko.observable()
(有一个名为的插件可以在这方面提供帮助),然后将adjustOrder
更改为
self.adjustOrder = function () {
for (var i = 0, j = self.items().length; i < j; i++) {
self.items()[i].sortOrder(i);
};
};
self.adjustOrder=功能(){
对于(var i=0,j=self.items().length;i
演示
旁注:但在您的情况下,sortOrder
属性实际上不需要任何属性,因为items
中的项目顺序就是排序顺序。因此,在绑定中,您可以只使用$index
(属性)而不是排序器
演示 这一点在 关键点:observableArray跟踪阵列中的对象, 不是这些对象的状态 简单地将一个对象放入observableArray并不能使所有 那个物体的属性本身是可以观察到的。当然可以 如果你愿意的话,让这些属性可以被观察到,但这是一个问题 独立选择 因此,您需要使您的
sortOrder
propertiesko.observable()
(有一个名为的插件可以在这方面提供帮助),然后将adjustOrder
更改为
self.adjustOrder = function () {
for (var i = 0, j = self.items().length; i < j; i++) {
self.items()[i].sortOrder(i);
};
};
self.adjustOrder=功能(){
对于(var i=0,j=self.items().length;i
演示
旁注:但在您的情况下,sortOrder
属性实际上不需要任何属性,因为items
中的项目顺序就是排序顺序。因此,在绑定中,您可以只使用$index
(属性)而不是排序器
演示 听起来是个不错的初始假设。通过使排序器可见,然后更新相同的可见来测试它。尽管如此,根据
项
可观察数组,将排序器
作为一个计算的可观察数组可能更有意义。听起来像是一个很好的初始假设。通过使排序器可见,然后更新相同的可见来测试它。虽然,将sortOrder
作为一个依赖于items
可观察数组的计算可观察数组可能更有意义。感谢nemesv,但我真正的问题在于,在我的real app中,提供给可观察数组的数据是来自ajax调用的JSON数组。因此,我不能像在第一个演示中那样指定可观察的sortOrder属性。这就是映射插件的用途?是的,映射插件的目标就是支持这些用例。在您的示例中,只需将ko.observableArray
替换为ko.mapping.fromJS
,它就可以工作了:。因为ko.mapping.fromJS
将常规JavaScript数组转换为可观察数组,并遍历每个项,将属性转换为ko.obserable
对象。感谢nemesv,但我真正的问题在于,在我的真实应用程序中,提供给可观察数组的数据是来自ajax调用的JSON数组。因此,我不能像在第一个演示中那样指定可观察的sortOrder属性。这就是映射插件的用途?是的,映射插件的目标就是支持这些用例。在您的示例中,只需将ko.observableArray
替换为ko.mapping.fromJS
,它就可以工作了:。因为ko.mapping.fromJS
将常规JavaScript数组转换为可观察数组,并遍历每个项,将属性转换为ko.obsable
对象。