Durandal是否有本机方式在模块的特定实例上触发事件?

时间:2016-08-11 01:53:19

标签: javascript knockout.js durandal durandal-2.0 knockout-3.0

我有一个复杂的情况,涉及几个不同模块的几个实例。

例如,我有一个输入模块,表单模块和一个formSelector模块。选择formSelector上的表单应该使用正确的输入填充表单。

在formSelector上方,我有另一种带有各种输入的表单。

所有输入都是根据数据库返回的内容构建的。

现在,我尝试使用pub / sub触发事件以将表单对象从formSelector传递到表单模块。这可以接受触发器不是特定于表单模块实例的。它会触发页面上所有表单的事件。

如何仅针对特定表单实例触发事件?

示例

注意:我在现场做了这个,只是为了结构的参考。这段代码可能不起作用。此外,我不认为javascript是回答这个问题的必要条件。

输入:观察一些数据

<input data-bind="value: input.data" />

表格:输入模块列表

<form>
    <div data-bind="foreach: form.inputs">
        <div data-bind="compose: { model: input.modelPath, activationData: input.activationData }"></div>
    </div>
</form>

FormSelector:选择所需的表单

//List of buttons to select the desired form
<div data-bind="foreach: forms">
    <div data-bind="click: updateForm"></div>
</div>
//The desired Form (Module)
<div data-bind="compose: { model: form.modelPath, activationData: form.activationData }"></div>

的index.html

//Form Module
<div data-bind="compose: { model: mainForm.modelPath, activationData: mainForm.activationData }"></div>
//FormSelector Module
<div data-bind="compose: { model: formSelector.modelPath, activationData: formSelector.activationData }"></div>

使用该示例,我想在updateForm内触发一个事件,该事件只会触发FormSelector内部组成的表单。问题是,app wide触发器将更新其上方的表单(mainForm)。

1 个答案:

答案 0 :(得分:0)

Durandal默认在 app 类上连接了事件,因此您可以使用 app.trigger app.on 功能全球。

但是,您可以使用 Events.includeIn(obj)函数连接自己的对象。

有关详细信息,请访问documentation