Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm Durandal-注册过程完成后处理viewmodel_Mvvm_Durandal_Hottowel - Fatal编程技术网

Mvvm Durandal-注册过程完成后处理viewmodel

Mvvm Durandal-注册过程完成后处理viewmodel,mvvm,durandal,hottowel,Mvvm,Durandal,Hottowel,只是想知道是否有人知道使用Durandal在viewmodel失效后处理或重新初始化viewmodel的好方法/简单方法 我有一个注册表单,在用户完成表单并成功注册后,我可以手动“重新初始化”,但我更愿意处理它,以便Durandal在再次访问特定路径时创建一个新的注册视图/视图模型。如果您的viewmodel模块返回函数而不是对象,它每次都会创建一个新对象,而不是重用“singleton”对象。请参阅的模块值部分 更新了Durandal模块构造函数功能信息的链接: 您可以分割差异: var ca

只是想知道是否有人知道使用Durandal在viewmodel失效后处理或重新初始化viewmodel的好方法/简单方法


我有一个注册表单,在用户完成表单并成功注册后,我可以手动“重新初始化”,但我更愿意处理它,以便Durandal在再次访问特定路径时创建一个新的注册视图/视图模型。

如果您的viewmodel模块返回函数而不是对象,它每次都会创建一个新对象,而不是重用“singleton”对象。请参阅的模块值部分

更新了Durandal模块构造函数功能信息的链接:

您可以分割差异:

var cache;
var ctor = function () {
    if (cache) return cache;
    // init logic
    cache = this;
}

只要用您喜欢的“我是否需要新东西”逻辑替换if(缓存)检查即可

如果使用路由,只需将用户重定向到基于实例的模块(返回构造函数的模块)。用户很可能会单击或触摸一个按钮,表示他已完成注册表。这就是重定向操作

如果您使用的是组合,您仍然会创建一个基于实例的模块。然后,一旦用户表示他已经完成了注册表,您就可以使用动态合成来交换它

动态合成是指Durandal合成上的视图和/或模型属性本身是可观察的,在viewModel中引用如下内容:

this.currentView = ko.observable('');
this.currentModel = ko.observable('');
然后,在HTML中:

<div>
    <div data-bind="compose: {view: currentView(), model: currentModel())"></div>
</div>

上述任何一种方法都将仅在需要时创建注册表单。

使用Durandal 2.0,您可以在合成生命周期内使用停用回调。这里有一些文档

我并不总是想重新创建它-我只想在用户完成注册表后重新创建。
ctor.prototype.done = function () {
    this.setCurrentView('viewmodels/registrationForm.html');
    this.setCurrentModel('viewmodels/registrationForm.js');
}

ctor.prototype.setCurrentView = function (view) {
    this.currentView(view);
}

ctor.prototype.setCurrentModel = function (model) {
    this.currentModel(model);
}