【问题标题】:durandal, pass parameters to widget during navigationdurandal,在导航期间将参数传递给小部件
【发布时间】:2014-07-04 06:01:15
【问题描述】:

我的 SPA 中有几个单例视图,每个视图都包含相同的小部件。

当视图被激活时,我从激活回调中获取一些参数并将其传递给小部件,它工作正常。

但如果我第二次导航到视图中(使用不同的参数进入激活回调) 正确地没有提出小部件的激活方法。

如何将新数据传递给小部件?

我尝试使参数可观察并将其订阅到小部件 (settings.params.subscribe) 并且它有效,但我认为这不是一个好的解决方案。

【问题讨论】:

  • 一种可能的解决方案是将视图从返回单例更改为返回构造函数。然后,每次导航到视图时都会触发 activate 方法。

标签: durandal durandal-2.0 durandal-navigation


【解决方案1】:

假设您从小部件返回构造函数,这应该非常简单 -

查看模型 -

var thisWidget = new widget(someArbitraryData)

function createWidget() {
    dialog.show(thisWidget);
}

// later
function updateWidget() {
    thisWidget.refreshData(newArbitraryData);
}

小部件模块 -

define([], function () {
    var ctor = function () {
        var self = this;
        self.data = ko.observable();
    };
    ctor.prototype.refreshData = function (newData) {
        var self = this;
        self.data(newData);
    };
    ctor.prototype.activate = function (activationData) {
        var self = this;
        self.data(activationData);
    };
});

【讨论】:

  • 但是小部件被引用到 html 标记中,我在页面的视图模型中没有引用。
  • 这没有任何意义,所以你必须提供一个例子。
  • 我的意思是:让我的小部件文件(view.html 和 viewmodel.js)位于 App/widgets/widgetName 中,在每个视图中我都可以使用标记 <section data-bind="widget: { kind: "widgetName", parameters: "parameters"}></section> 并且 viewLocator 会负责关于视图和视图模型之间的绑定。如果我想从视图模型中实例化小部件,我应该将小部件模块放入视图中,但是如何将视图绑定到我的对象?使用 compose 绑定时出现错误,因为它正在寻找标准文件夹中的视图,而不是小部件之一。
  • 我还阅读了您有趣的帖子link。我明白了。如果我错了,请纠正我:您创建了小部件(不是单例模块)但没有使用 durandal 小部件插件约定,这就是组合工作的原因。+
  • 没错。小部件插件只是一个帮手,但我发现它不像在视图和视图模型文件夹中创建一个小部件文件夹那样冗长和可扩展
猜你喜欢
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2019-08-26
  • 2018-10-24
相关资源
最近更新 更多