Durandal を使用してアプリケーションを開発していますが、少し問題が発生しました。何らかの理由でこれを機能させる方法がわかりません。
問題: 私のメイン ビュー モデル バインディング コンテキストとウィジェット コンテキストは完全に分離されています。データは正常に表示されますが、静的であり、タスクの追加や新しいタスク リストなどのクリック機能を実行できません (親はプロジェクトで、$data はウィジェット オブジェクト関数です)。ただし、「新しいタスク リスト」を作成すると、そのコンテンツはその親 (ウィジェット コントローラー) を介して操作できます。作成されたリストと同様に、表示される初期データを操作できる必要があります (新しく作成されたすべてのリストはタスクを追加できます)。何らかの理由で、これを実現する方法がわかりません。
プロジェクト ビューでは、データのマークアップ リストは次のように呼び出されるウィジェットです。
<section data-bind="tasklists: { items: project.task_lists }"></section>
タスク リスト ウィジェット ビューは次のとおりです。
<!-- ko foreach: { data: settings.items } -->
<div data-bind="text: title" class="task-list-title"></div>
<div class="widget-task-list">
<!-- ko foreach: { data: tasks } -->
<li class="task-list-item">
<input type="checkbox" class="task-list-checkbox" data-bind="checked: completed, attr: { id: 'task-check' + id() + $index() }">
<label data-bind="text: title, attr: { for: 'task-check' + id() + $index() }"></label>
<span data-bind="text: comment_count " class="comments-count"></span>
<span class="pill assigned">
<!-- ko if: assigned_to -->
<span data-bind="text: assigned_to"></span>
<!-- /ko -->
<span> - </span>
<!-- ko if: due_date -->
<span data-bind="time: due_date"></span>
<!-- /ko -->
</span>
<span data-bind="text: 'PROJECT TAG'" class="tag-teal"></span>
<span data-bind="bootstrapPopover: {} " class="pill">Popover</span>
</li>
<!-- /ko -->
<input type="checkbox" class="task-list-checkbox">
<input data-bind="click: $data.enableTyping, value: $data.newTask" placeholder="Add a task to this list" type="text" class="add-task">
<span data-bind="bootstrapPopover: {}, text: 'Unassigned' " class="pill"></span>
<!-- <span data-bind="widget: { kind: 'popover' } "></span> -->
<span data-bind="text: 'Due Date'" class="pill"></span>
<div data-bind="visible: $data.isTyping" class="task-action-buttons-holder">
<button class="button button-add" data-bind="click: $data.addTask, text: 'Add Task' "></button>
<button class="button button-cancel" data-bind="click: '', text: 'Cancel' "></button>
</div>
</div>
<!-- /ko -->
プロジェクトモデルは次のとおりです。
return {
activate: function(data) {
var project_loading = cache.getItem('project', Number(data.id));
var self = this;
$.when(project_loading).done(function(project) {
self.project = new Project(project);
self.project.load();
});
return project_loading;
}
};
そして最後に、プロジェクト バインディング コンテキスト:
["Binding", "views/projects/single", Object]
0: "Binding"
1: "views/projects/single"
2: Object
__moduleId__: "viewmodels/projects/single"
activate: function (data) {
project: Project
__proto__: Object
length: 3
__proto__: Array[0]
プロジェクト タスク リスト ビューで初期データを操作し、プロジェクトとウィジェットのバインド コンテキストを同じにするだけで済みます。これは可能ですか?考え過ぎた感じです。どんな助けでも大歓迎です。