Я хотел узнать больше о реализации интеллектуального грязного тега в одной из ссылок, с которыми я столкнулся.Сведения о внедрении Knockout SmartTag
<ul data-bind="foreach: items">
<li data-bind="css: { dirty: dirtyFlag.isDirty }">
<span data-bind="text: id"></span>
<input data-bind="value: name" />
</li>
ko.dirtyFlag = function(root) {
var result = function() {}
var _initialState = ko.observable(ko.toJSON(root));
result.isDirty = ko.computed(function() {
return _initialState() !== ko.toJSON(root);
});
return result;
};
function Item(id, name) {
this.id = ko.observable(id);
this.name = ko.observable(name);
this.dirtyFlag = new ko.dirtyFlag(this);
}
var ViewModel = function(items) {
this.items = ko.observableArray([
new Item(1, "one"),
new Item(2, "two"),
new Item(3, "three")
]);
this.save = function() {
alert("Sending changes to server: " + ko.toJSON(this.dirtyItems));
};
this.dirtyItems = ko.computed(function() {
return ko.utils.arrayFilter(this.items(), function(item) {
return item.dirtyFlag.isDirty();
});
}, this);
this.isDirty = ko.computed(function() {
return this.dirtyItems().length > 0;
}, this);
};
ko.applyBindings(new ViewModel());
Я сделал несколько изменений в исходный post
Вот мой новый fiddle Я хочу знать больше о причинах создания отдельного функционального объекта ko.dirtyFlag , В блоге сообщается
, что делает объект функцией и добавляет вычисленные наблюдаемые объекту функции. Это означает, что вы должны привязать к нему как dirtyFlag.isDirty(). Когда ko.toJS запускается, он просто видит обычную функцию и игнорирует ее.
Что это значит?
_initialState = ko.observable(ko.toJSON(root))
ли это утверждение в ko.dirtyFlag также повторно оценить все наблюдаемые в создателю объекта, т.е. товара?
И какова реальная необходимость для _initialState быть наблюдаемым?
_initialState = ko.observable(ko.toJSON(root))
Выполнение не выполняется, если _initialState не является наблюдаемым.
Краткая заметка о фактической причине структурирования кода таким образом - это то, что я действительно хочу знать.
Очень точные и подходящие причины. Благодарю Кришну. –