6

(每天都有大量的问题与为什么我不能设置我的 observable 的值相关联,而不是有这么多不同的答案说同样的事情,我想创建一个问题供大家参考)

Knockout Observable / Observable Array 的设置值不更新

设置我的 observable observableArray 的值没有更新!

将项目添加到可观察数组

为什么我不能将一个项目添加到我的 Knockout 可观察数组中?

4

1 回答 1

8

Knockout Observable / Observable Array 的设置值不更新

您需要使用 setter 函数来更新 observable / observableArray 的值 -

前任。1(可观察)-

var name = 'John';
var myValue = ko.observable();
myValue(name); // Set myValue equal to John, update any subscribers

var newObservable = ko.observable('Bill');
myValue(newObservable()); // Set myValue equal to the value of newObservable, which is Bill

前任。2 (observableArray) -

var names = ['John', 'William', 'Dave'];
var myArray = ko.observableArray();
myArray(names); // Set myArray equal to the array of names John, update any subscribers

var newArray = ko.observableArray(['Sanford']);
myArray(newArray()); // Makes a clone of the array

注意请参阅此问题以了解为什么这可能不是您想要做的 -在 knockoutJS 中克隆/复制 observablearray 的最佳方法是什么?

将项目添加到可观察数组

您需要将项目推入 observableArray,而不是observableArray的基础值 -

var name = 'John';
var myValue = ko.observable(name);
var myArray = ko.observableArray();
myValue.push(myValue()); // Add myValue to my observableArray**

创建要在视图模型中使用/共享的模型

您可以创建一个可重用的模型以在您的视图模型中使用。这类似于在 C# 中使用类来创建具有公共属性的对象。

function objectModel(item) {
    var self = this;
    self.Name = ko.observable(item.name);
    self.Description = ko.observable(item.description);
}

可以像这样创建 -

var object = {
    name: 'John',
    description: 'a person'
}

var john = new objectModel(object);

这也可以通过参数来完成,而不仅仅是对象 -

function objectModel(name, description) {
    var self = this;
    self.Name = ko.observable(name);
    self.Description = ko.observable(description);
}

var john = new objectModel('John', 'a person');
于 2013-10-15T21:27:04.273 回答