【问题标题】:Setting value of Observable not updating in KnockoutObservable 的设置值在 Knockout 中不更新
【发布时间】:2013-10-23 20:37:04
【问题描述】:

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

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

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

将项目添加到可观察数组

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

【问题讨论】:

    标签: javascript mvvm knockout.js


    【解决方案1】:

    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
    

    注意请参阅此问题以了解为什么这可能不是您想要做的 - What is the best way of cloning/copying an observablearray in knockoutJS?

    将项目添加到可观察数组

    你需要把item推入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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2017-09-02
      • 2012-08-09
      相关资源
      最近更新 更多