У меня есть наблюдаемые массивы, привязанные к html-полям в пользовательском интерфейсе.Использование массивов внутри нокаута наблюдаемого
Однако изменения в этих полях в пользовательском интерфейсе не отражаются в модели просмотра, поскольку согласно документации по нокауту, наблюдаемый массив отслеживает, какие объекты находятся в массиве, а не состояние этих объектов.
Код выглядит, как показано ниже:
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 не учитывается.
Одним из подходов может быть размещение нормального массива в пределах наблюдаемого.
Есть ли какой-либо пример кода, чтобы освежить этот или любой лучший подход?
Пожалуйста, помогите.
Моя реализация выглядит аналогично подходу, упомянутый здесь, но он не работает , Я обновил свой вопрос с помощью блока кода – Prasad