【问题标题】:Using Arrays inside knockout observable在可观察到的淘汰赛中使用数组
【发布时间】:2013-03-22 10:53:12
【问题描述】:

我有绑定到 UI 上的 html 字段的可观察数组。

但是,UI 上这些字段的更改不会反映在视图模型中,因为根据 Knockout 文档,可观察数组跟踪数组中的哪些对象,而不是这些对象的状态。

代码如下:

var RewardMissionModel = function () {
    var self = this;
    self.achievementID = ko.observable();
    self.rewardAsset = ko.observable();
    self.rewards = ko.observableArray([new Reward("Points", "Qty", "", "Item", "")]);

    self.isDirty = false;

    //Add reward
    self.addReward = function () {
        //var self = this;
        var tempRewardType = "Points";
        self.rewards.push(new Reward(tempRewardType, "Qty", "", "Item", "", 0));
    };

    //Remove reward
    self.removeReward = function (reward) {
        if (self.rewards().length > 1)
            self.rewards.remove(reward);
    };
    //------------------------------------------------------------------------------
};

function Reward(rewardType, quantityLabel, rewardQuantity, itemLabel, item, itemID) {
    var self = this;
    //self.viewModel = viewModel;
    self.rewardTypes = ["Points", "Coins", "Items"];    
    self.rewardType = ko.observable(rewardType);
    self.itemLabel = ko.observable(itemLabel);
    self.itemText = ko.observable(item);
    self.quantityLabel = ko.observable(quantityLabel);
    self.rewardQuantity = ko.observable(rewardQuantity);
    this.selectedRewardType = ko.observable(rewardType);
    self.isItemType = function (selectedRewardType) {
        return selectedRewardType === this.selectedRewardType();
    }

    self.itemID = ko.observable(itemID);

}

HTML 代码:

<div data-bind="template: { name: 'rewards-template', foreach: rewards }"></div>
                <script type="text/html" id="rewards-template">
                    <span style="margin-left:30px">Reward Type</span>
                    <select class="dropdown" data-bind="options: rewardTypes, value: selectedRewardType"></select>
                    <span data-bind="text: itemLabel, visible: isItemType('Items')"></span>

当我在可观察数组中添加或删除对象时,viewmodel 脏标志被设置,但是当我在 UI 上进行修改时,它不会被考虑。

其中一种方法是将普通数组放入可观察对象中。

是否有任何代码示例来说明这一点或任何更好的方法?

请帮忙。

【问题讨论】:

    标签: knockout.js observable ko.observablearray


    【解决方案1】:

    我认为使可观察数组对象的属性充当可观察的最佳方法是使它们也可观察,以便您创建包含也可观察的可观察数组。例如::

        var viewModel = {
        accounts: ko.observableArray([]),
        init: function () {
            this.accounts.push({
                Property1: ko.observable("some value"),
                Property2: ko.observable("some value"),
                Property3: ko.observable("some value")
                });
            }
        };
    

    请检查这个问题,我想这就是你要找的东西

    Updating of object inside observable array is done but changes are not coming on browser

    【讨论】:

      【解决方案2】:
      function MyObject(val1, val2)
      {
         this.firstProperty = ko.observable(val1);  
         this.secondProperty = ko.observable(val1);
      }  
      
      var myViewModel = new function()  
      {  
         var self = this;
         self.values = ko.observableArray([]);  
         self.values.push(new MyObject("value11", "value12"));  
         self.values.push(new MyObject("value21", "value22"));
      }
      

      【讨论】:

      • 我的实现看起来类似于这里提到的方法,但它不起作用。我已经用代码块更新了我的问题
      猜你喜欢
      • 2012-09-08
      • 2015-10-05
      • 2013-05-01
      • 2015-06-22
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多