0
這應該是一個簡單的問題,但我無法弄清楚如何去做或找到正確的答案。我試圖實現changeTracker here,但我有一個viewModel函數,而不僅僅是一個變量。我目前使用knockoutjs如何間接調用applybindings和viewmodel函數
var viewModel = function() {
// code
}
,並使用
var vm = new viewModel();
ko.applyBindings(vm);
如何納入changeTracker到我的應用程序應用綁定?我試圖
var vm = new changeTracker(viewModel());
和
var vm = new changeTracker(new viewModel());
但既不工程。該changeTracker小提琴HTML是:
<p>Text property: <input data-bind="value: someTextProperty" /></p>
<p>Bool property: <input type="checkbox" data-bind="checked: boolProperty" /></p>
<p>Array items count: <span data-bind="text: arrayItems().length"></span> <button data-bind="click:addItem">Add</button></p>
<hr/>
<p>Something has changed? <b data-bind="text: tracker().somethingHasChanged() ? 'YES' : 'NO'"></b></p>
<button data-bind="click: tracker().markCurrentStateAsClean, enable: tracker().somethingHasChanged">
Mark current state as clean
</button>
和JavaScript是:
function changeTracker(objectToTrack, hashFunction) {
hashFunction = hashFunction || ko.toJSON;
var lastCleanState = ko.observable(hashFunction(objectToTrack));
var result = {
somethingHasChanged : ko.dependentObservable(function() {
return hashFunction(objectToTrack) != lastCleanState()
}),
markCurrentStateAsClean : function() {
lastCleanState(hashFunction(objectToTrack));
}
};
return function() { return result }
}
var viewModel = {
someTextProperty: ko.observable("Hello"),
boolProperty: ko.observable(false),
arrayItems: ko.observableArray([]),
addItem : function() { this.arrayItems.push("Another") }
};
viewModel.tracker = new changeTracker(viewModel);
ko.applyBindings(viewModel);
呃,我真的爲此而戰,是吧?謝謝 - 這很好! – sfors 2014-12-19 14:43:39