area
ウィジェット ビューは、常に type であるため、通常のビューのように簡単に切り替えることはできませんpartial
。
それらを変更するには、おそらく上書きする必要がwidget.convertKindToModulePath
ありますwidget.convertKindToViewPath
https://github.com/BlueSpire/Durandal/issues/217の例を次に示します。
var oldConvert = widget.convertKindToModulePath;
widget.convertKindToModulePath: function(kind) {
if (typeof(kind) == 'function') {
return widget.mapKindToModuleId(kind());
}
return oldConvert(kind);
}
Update
Widget は、ビュー内でオブザーバブルや計算などを使用して構築できます。
<!-- ko widget: getWidgetSettings() -->
<!-- /ko -->
getWidgetSettings
のようなものを返すko.computed
代わりに (ステータスに応じて) になる可能性があります。{kind: 'workitem'}
{kind: { id : 'workitem', status: 'statusId'}}
OOTB Durandal はkindwidget.convertKindToModulePath
が.widget.convertKindToViewPath
string
object
以下に沿って何かを始める必要があります。
var oldconvertKindToModulePath = widget.convertKindToModulePath;
widget.convertKindToModulePath = function( kind ) {
if ( typeof(kind) == 'object' ) {
return 'widgets/' + kind.id + '/viewmodel';
}
return oldconvertKindToModulePath(kind);
};
var oldconvertKindToViewPath = widget.convertKindToViewPath;
widget.convertKindToViewPath = function( kind ) {
if ( typeof(kind) == 'object' ) {
return 'widgets/' + kind.id + '/' + statusViewMap[statusId] ;
}
return oldconvertKindToViewPath(kind);
};
これをウィジェットとして実装する代わりに、これを標準モジュールとして実装し、getView
メソッドを活用することを検討してください。これが例です
http://dfiddle.github.io/dFiddle-2.0/#view-composition/getView
define(['knockout'], function(ko) {
var roles = ['default', 'role1', 'role2'];
var role = ko.observable('default');
var getView = ko.computed(function(){
var roleViewMap = {
'default': 'viewComposition/getView/index.html',
role1: 'viewComposition/getView/role1.html',
role2: 'viewComposition/getView/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.'
};
});
この例ではシングルトンを使用していますが、これは複数の独立したワークアイテムを持つ要件を満たさないため、コンストラクター パターンを使用して書き直す必要があります。
お気軽にフォークしてください。プルリクエストを受け付けています:)。