2014-02-18 40 views
0

在DurandalJS中,我在ViewModel中创建了一个激活器,它将与视图中的Compose绑定绑定。微不足道的例子:DurandalJS组合绑定不传递activationData到子视图模型

var ViewModel = function(){ 
    this.childView = activator.create(); 
    this.activate = function(whyIsThisUndefined){ console.error('Well?' + whyIsThisUndefined); } 
} 


<div data-bind="compose: { model : theModel, activationData: [1]}"></div> 

我在做什么错? Durandal为什么不通过激活参数?

+1

检查这篇文章 - http://pwkad.wordpress.com/2014/02/02/best-parts-about-durandal/ –

+0

嘿,PW,卡德,我其实只是读了那篇文章。我意识到这种语法,并在我的搜索引擎中发现了它的几处引用,但即使使用硬编码值,也没有任何内容传递给我的激活方法。你有一个我能看到的工作例子吗?你在用什么版本的Durandal? (对我来说是2.0.1)。 –

+0

2.0.1。你可以将激活数据更改为activationData:{data:'Hey !!!!' }然后console.log(whyIsThisUndefined)并查看该对象上是否有数据属性? –

回答

3

当你使用Singleton作为你的视图模型时,我不认为参数会在随后的每一次传递给activate函数。在你的数据传递这样 -

activationData: { data: 'Hey!!!!' } 

并确保您正在创建启动到样机并创建视图模型(或AMD模块),每一次的新实例。

+0

关于将activate()添加到原型...为什么是这样?我已经附加到新创建的实例本身没有问题到目前为止。这将是一个微不足道的变化,但我想了解背后的“为什么”。 –

+0

如果你使用的构造函数是'ctor = function(){}',你可以在'ctor.prototype'上加'activate',这样它就可以在多个实例中共享。尽管没有理由在单身人士身上使用它,但可能是一个错字。 – RainerAtSpirit

+0

从上下文中读取,我的意思是当你不使用单例并使用构造函数时,将激活附加到原型上。 –