Задать стоимость свойства вне модели Nockoutout
У меня есть модель представления нокаута, определенная следующим образом:
function viewModel () {
var self = this;
self.myName = ko.observable();
self.myValue = ko.observable("10");
};
Теперь мне нужно было изменить значение модели представления, когда была нажата ссылка, например:
$('a.treeitem').live("click", function (e) {
e.preventDefault();
viewModel.myValue("20"); // this line does not work
});
Однако я не могу найти правильный способ установки значения, на консоли Chrome отображается следующее сообщение:
Uncaught TypeError: функция объекта viewModel() {...} не имеет метода myValue
Ответы
Ответ 1
Вы можете сохранить модель представления как переменную следующим образом:
window.vm = new viewModel();
ko.applyBindings(vm);
$('a.treeitem').live("click", function (e) {
e.preventDefault();
window.vm.myValue("20");
});
Всякий раз, когда вы читаете window.vm
, вы будете читать из этого фактического экземпляра объекта viewModel
Ответ 2
Собственно, то, что я хочу сделать, может быть сделано внутри определения модели представления, поэтому я могу изменить свой код на это:
function viewModel () {
var self = this;
self.myName = ko.observable();
self.myValue = ko.observable("10");
$('a.treeitem').live("click", function (e) {
e.preventDefault();
self.myValue("20");
});
};
Теперь все работает нормально. Иногда правильный способ действительно является простым.