У меня есть проект, который использует раскрывающий шаблон модуля и прототипирование. Это было отлично для того, чтобы помочь мне управлять большим количеством Javascript-кода с помощью Knockout JS. Это было прямо для стандартных наблюдений и действий и т. Д. Однако, когда я пришел к созданию вычисленного наблюдаемого, я не могу заставить его работать.Вычислительные наблюдаемые с раскрытием шаблона прототипа в нокауте JS
Я прочитал эту статью: Difference between knockout View Models declared as object literals vs functions
который, кажется, точно описать, что я хочу, как я использую литерал объекта. Однако я не могу правильно его реализовать.
Вот HTML:
<div data-bind="with: MyForm">
<p>First Name: <span data-bind="text: formValues.FirstName"></span></p>
<p>Last Name: <span data-bind="text: formValues.LastName"></span></p>
<p>Full Name: <span data-bind="text: formValues.FullName"></span></p>
</div>
Вот Javascript:
window.Test = window.Test || {};
Test.Main = function() {
this.viewModel = {};
this.setupViewModel();
return {
viewModel: this.viewModel
};
};
Test.Main.prototype.setupViewModel = function() {
var viewModel = function() {
var vm = this;
this.MyForm = {
formValues: {
FirstName: ko.observable("Joe"),
LastName: ko.observable("Bloggs")
}
}
};
/*
viewModel.MyForm.formValues.FullName = ko.computed(function() {
return this.FirstName() + " " + this.LastName();
}, vieModel.MyForm.formValues);
*/
this.viewModel = new viewModel();
ko.applyBindings(this.viewModel);
return this;
}
var mainApplication = new Test.Main();
Я создал простой JsFiddle ниже, чтобы проиллюстрировать этот код: http://jsfiddle.net/dontbesorry80/2Ltb790z/
Я закомментирована то, что я думал, будет решением, поскольку оно не работает. Любая помощь в настройке этого jsFiddle для работы (правильно отобразить полное имя) была бы весьма признательна.
Иными словами, вычисленное свойство должно быть добавлено в экземпляр * модели *, а не в функцию конструктора. – haim770
thats right, слово * instance * в этом случае весьма важно. – Slawek
Perfect !! Спасибо, я отметил это как ответ. – dontbesorry80