对话框/模态的自定义内部模板(视图)?

时间:2014-06-11 23:03:03

标签: dialog durandal durandal-2.0

我有以下内容:

    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);
};

所以我认为我已经完成了所有的设置......但任何确认都会从那里的职业选手那里变得很酷。

0 个答案:

没有答案