Подтвердить что ты не робот

Задать стоимость свойства вне модели 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

4b9b3361

Ответ 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");
    });
};

Теперь все работает нормально. Иногда правильный способ действительно является простым.