Knockout.js, вызывающий метод вне модели представления - PullRequest
4 голосов
/ 01 апреля 2012

Я хочу сделать мои данные доступными вне моей модели представления.Итак, я создал объект модели представления, но у меня возникают проблемы с привязкой его свойств.Обратите внимание, что внутри моей модели все работает правильно.

В основном упрощенный псевдокод:

function Users() {
    name;
    date;
}

function userHealthModel() {
     function createUsers() { new Users[] };
}

self.userModel = ko.observable(new userHealthModel());
self.userModel.createUsers();

Если я вызываю метод createUsers внутри моей модели, моя привязка работает нормально.

Вот jsFiddle, обратите внимание, что моя проблема полностью в конце JS, я прокомментировал это: http://jsfiddle.net/fourgates/jpk22/1/

Я новичок в JS и KO.не совсем уверен, как использовать $ root, $ parent и т. д. Пожалуйста, помогите коллеге-энтузиасту программирования!Большое спасибо заранее!

1 Ответ

10 голосов
/ 01 апреля 2012

Я все еще не уверен на 100%, понимаю ли я, что вы пытаетесь сделать, но вот некоторые мысли о коде в вашей скрипке:

Если у вас есть что-то вроде

var self = this;

в глобальной области видимости (= не в функции), this указывает на объект окна.Поэтому это не имеет никакого смысла.

self.userModel = ko.observable(new userHealthModel());

Создание наблюдаемой модели представления не требуется - вы не ожидаете, что вся модель изменится, верно?Он всегда останется моделью пользователя и не станет внезапно «моделью сообщения» или чем-то подобным.

Если вы хотите вызвать метод вашей модели представления извне, просто создайте экземпляр:

var userModel = new userHealthModel();
userModel.createUsers();

// Use "userModel" to access the methods and properties
// like you're using "self" inside the view model:
userModel.users2()[1].userId(5);

// now apply the binding to THE SAME view model
ko.applyBindings(userModel);

http://jsfiddle.net/jpk22/3/

Если это не то, что вы искали, дайте мне знать!

...