我有以下内容:
app.showMessage('template', book.title(), [save, cancel]).then(function(result) {
if (result == save) {
alert('saved');
} else if (result == cancel) {
alert('canceled');
}
});
这很有用,但是我想将'template'
替换为将绑定到当前viewmodel(添加/编辑对象的表单)的视图路径。是否有任何机制来实现这一目标?
我已经这样做了:
dialog.MessageBox.setViewUrl('/App/views/templates/editBook.html');
哪个有效,但所有的chrome和对话框的优点都丢失了 - 它取代了整个对话框模板,而不仅仅是内部模板。
编辑:
我现在有一个专用的视图/视图模型对,我使用它:
vm.editBook = function (book) {
dialog.show('viewmodels/editBook', book);
};
使用我的editBook.js:
define(function () {
var vm = {};
vm.book= ko.observable();
vm.cancel = function () {
alert('should cancel');
};
vm.save = function() {
};
vm.activate = function(book) {
vm.book(book);
};
return vm;
});
我的观点:
<div data-view="plugins/messageBox" class="messageBox" data-bind="with: book">,
<div class="modal-header">
<h3 data-bind="text: title"></h3>
</div>
<div class="modal-body">
<p class="message" data-bind="text: title"></p>
</div>
<div class="modal-footer">
<button data-bind="click: $parent.cancel">cancel</button>
<div style="clear:both;"></div>
</div>
</div>
但是,如何从视图中关闭对话框?我尝试将对话框对象传递给vm来调用dialog.close
,但这似乎不起作用。
再次更新:通过要求dialog
插件并调用dialog.close(vm),durandal知道如何选择并关闭正确的对话框:
vm.cancel = function () {
//alert('should cancel');
dialog.close(vm);
};
所以我认为我已经完成了所有的设置......但任何确认都会从那里的职业选手那里变得很酷。