Durandal从其他文件中单击调用函数

时间:2015-02-08 00:42:27

标签: javascript jquery knockout.js durandal

我有一个主文件(periods.js),通过点击绑定自定义对话框打开:

periods.js

[...]
            openAddFreeDayDialog = function () {
            var dialog = {viewUrl: 'views/addFreeDay'};
            app.showDialog(dialog);
        },

        addFreeDay = function () {
            var data = $('#addFreeDay').serializeArray();
        },
[...]

periods.html

[...]
<button type="button" class="btn btn-success btn-block" data-bind="click:$root.openAddFreeDayDialog"><i class="fa fa-plus-circle fa-lg"></i> new</button>
[...]

函数openAddFreeDayDialog打开这个模态:

addFreeDay.html

<div class="modal-content autoclose">
    <div class="modal-header">
        <h3 class="modal-title">freien Tag hinzufügen</h3>
        <small>Dauert der dieser freie Tag nur einen Tag  müssen Entdatum und Startdatum übereinstimmen</small>
    </div>
    <div class="modal-body">
        <form id="addFreeDay">
            <div class="form-group">
                <label for="dayName">Bezeichnung für diesen Tag </label>
                <input type="text" class="form-control" id="dayName">
            </div>
            <div class="form-group">
                <label for="dayStartDate">Anfagsdatum des Tages </label>
                <input type="date" class="form-control" id="dayStartDate">
            </div>
            <div class="form-group">
                <label for="dayEndDate">Enddatum des Tages </label>
                <input type="date" class="form-control" id="dayEndDate">
            </div>
        </form>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-success btn-lg btn-block" data-bind="click:$addFreeDay"><i class="fa fa-plus-circle fa-lg"></i>other new</button>
    </div>
</div>

我想通过单击绑定主文件的其他功能来调用此对话框:

<button type="button" class="btn btn-success btn-lg btn-block" data-bind="click:$addFreeDay"><i class="fa fa-plus-circle fa-lg"></i>other new</button>

我尝过很多人的想法:click:addFreeDayclick:addFreeDayclick:$root.addFreeDayclick:periods.addFreeDayclick:$periods.addFreeDayclick:$root.periods.addFreeDay

有时候它会给我一个错误。我错了什么?

1 个答案:

答案 0 :(得分:0)

您是否有相应的 periods.html 文件作为视图?

periods.html 文件中,您将获得标记,包括click绑定。后面的viewModel - periods.js 文件 - 将包含点击的事件处理程序,您可以在其中调用对话框。这两个文件在Durandal和Aurelia中组成一个MVVM单元。

根据您的构图结构,您很可能会使用$data.addFreeDay.bind($data)作为处理程序来访问该函数。但是,根据您的结构,它也可以很容易$parent.addFreeDay.bind($parent)$root.addFreeDay.bind($root)