Durandal の哲学では、シェルがデータを取得するべきではありません。代わりに、購入した vm はそのactivate
コールバック ( http://durandaljs.com/documentation/Creating-A-Module/ ) でそれを行う必要があります。activate
if ticket collection is a async
operationから promise を返すようにしてください。
そのパターンの例を次に示します。ここでgetListCollection
は、キャッシュされた結果 (同期) または非同期の結果を返すことができるため、常にプロモースを返す $.when() でラップされます。
http://www.spirit.de/demos/metro/durandalsp3/index.html#/lists
var activate = function () {
var self = this;
var webUrl = L_Menu_BaseUrl;
self.webUrl(webUrl);
logger.log('Activatíng List View', null, 'list', true);
return $.when(spdata.getListCollection({ webUrl: webUrl })).then(function (result) {
// Access to detail list information through listInfo[listName]
self.listInfo = result;
self.lists(createListVMs(result));
return true;
});
};
コメントに基づいて更新: 決定を下すためにシェルでデータを取得する必要がある場合は、いくつかのオプションがあります。
- Durandal 1.2 ではウィジェットのみが追加のデータを渡すことができるため、購入した vm をウィジェットに変換することを検討してください。
global
別の方法として、シングルトンを返し、シェルと購入の間で共有される AMD を 作成します。
- 3 番目のオプションは、購入をシェルで依存関係として宣言し、購入を直接変更することです。
詳細については、@Joseph Gabriel を参照してください。DurandalJSのデータを他のビューに渡します。