2016-06-17 2 views
0

У меня есть страница контейнера Index.html (это можно рассматривать как главную страницу), в которой я загружаю разные страницы Home.html, people.html, и каждая страница имеет свой собственный файл jm viewmodel (Home.js, people. JS). Я перемещаюсь из Home.html в People.html. В Home.js я делаю вызов Ajax, и мне нужны данные, которые он извлекает в People.js, когда я перехожу на страницу People.html. Я попытался использовать PublishOn и SubscribeTo, но не дал результатов, я попытался создать переменную в main.js и подумал об использовании ее в файлах Home.js и people.js, я могу получить к ней доступ с помощью $ root. но я могу сделать это только на странице Html, но не в Js. Надеюсь, я поняла, что проблема связана с моей проблемой. ** Примечание: ** Я использую RequireJs, а также для конфигурации.Как поддерживать глобальные переменные в KnockoutJs во всем приложении?

Пожалуйста, помогите мне в этом.

+0

Я не уверен, что правильно понимаю вашу проблему. У вас есть данные, хранящиеся в viewmodel home.js, и вам нужно получить доступ к этим данным из другой модели просмотра после перенаправления? Или это на самом деле одна страница, и у вас есть оба режима просмотра, и вам нужно только получить доступ к этим режимам просмотра друг от друга? – Martin

+0

«В Home.js я делаю вызов Ajax, и мне нужны данные, которые он получает в People.js ...» - вот где вы меня потеряли. Мне кажется, что вы должны добавить переменную в контейнер (вы не объяснили, где используется 'main.js') и получить доступ к нему из любой модели представления. Возможно, вы добавляете его или получаете к нему доступ из неправильной области? – awj

+0

@Martin: У вас есть данные, хранящиеся в viewmodel home.js, и вам нужно получить доступ к этим данным из другой модели просмотра после перенаправления? "Да". Я не загружаю обе страницы сразу. – yashwanth

ответ

0

Если данные действительно глобальны, одним из способов является создание нового модуля AMD/RequireJS, который затем идентифицируется как зависимость в ViewModels для Home.html и People.html. Затем вы позволяете этому общему модулю управлять данными. У меня возникнет соблазн переместить вызов Ajax из Home ViewModel в этот новый общий модуль.

Использование $root создает неявный контракт между вашими взглядами. Некоторые сказали бы, что это трудно поддерживать и что лучше документировать отношения с помощью параметров детского просмотра. Если данные не являются глобальными, а разделяются только между двумя дочерними представлениями определенного вида, вы можете передавать данные в дочерние представления через параметры. Используете ли вы компоненты Knockout или модули Oracle JET? Оба позволяют передавать параметры из родительского представления в дочерний ViewModel.

+0

Параметр Passing Dependency для ViewModels выполнил эту работу для меня !! благодаря :-) – yashwanth