0

Durandal で現在のモジュールのパスを取得する方法はありますか? 私は SPA 内にダッシュボードを構築しており、durandal が "FolderWidgetName" で行うのと同じ方法でウィジェットを整理したいと考えており、フォルダーには controller.js および view.html ファイルが含まれます。controller.js ファイルで getView() メソッドを使用しようとしましたが、ビューの現在のフォルダーを検索することはできませんでした。

getView(){  
    return "view"; // looks in the "App" folder  
    return "./view"; // looks in the "App/durandal" folder  
    return "/view"; // looks in the root of the website   
    return "dashboard/widgets/htmlviewer/view" //don't want to hard code the path  
} 
  • コントローラー内のパスをハードコーディングしたくない
  • アプリの残りの部分は、標準的な規則を使用する通常の durandal スパとして引き続き機能するため、viewlocator をオーバーライドしたくありません。
4

3 に答える 3

1

define(['module'], function(module) { ...現在のモジュールを保持するために使用できます。getView()特定のビューを設定したり、以下の例のように複数のビューを動的に切り替えることができます。

define(['module'], function(module) {

  var roles = ['default', 'role1', 'role2'];
  var role = ko.observable('default');
  var modulePath = module.id.substr(0, module.id.lastIndexOf('/') +1);

  var getView = ko.computed(function(){
        var roleViewMap = {
          'default': modulePath + 'index.html',
          role1: modulePath + 'role1.html',
          role2: modulePath + 'role2.html'
        };

        this.role = (role() || 'default');

        return roleViewMap[this.role];
  });


  return {
    showCodeUrl: true,
    roles: roles,
    role: role,
    getView: getView,
    propertyOne: 'This is a databound property from the root context.',
    propertyTwo: 'This property demonstrates that binding contexts flow through composed views.',
    moduleJSON: ko.toJSON(module)
  };


});

ここにライブの例があります http://dfiddle.github.io/dFiddle-1.2/#/view-composition/getView

于 2013-07-12T07:25:15.837 に答える
0

setup ビューを router.activeRoute.name または .url にバインドするだけで、探していることが実行されます。ロード時に setup viewmodels プロパティに書き戻そうとする場合は、以下のように実行できます。

公開モジュールを使用している場合は、関数を定義し、モジュール定義リストを作成して返す必要があります。例 :

define(['durandal/plugins/router', 'view models/setup'],
    function(router, setup) {

var myObservable = ko.observable();

function activate() {
    setup.currentViewName = router.activeRoute.name;
    return refreshData();
}

var refreshData = function () {
    myDataService.getSomeData(myObservable);
};

var viewModel = {
    activate: activate,
    deactivate: deactivate,
    canDeactivate: canDeactivate
};

return viewModel;
});

リテラル、オブザーバブル、さらには関数を明らかにしながら直接明らかにすることもできます -

    title: ko.observable(true),
    desc: "hey!",
    canDeactivate: function() { if (title) ? true : false,

利用可能なものの詳細については、durandal のルーター ページを確認してください。また、Durandal 2.0 がルーターを切り替えていることに注意してください。

http://durandaljs.com/documentation/Router/

于 2013-07-11T09:55:02.820 に答える