如何在RactiveJS中访问装饰器中的对象

时间:2014-04-24 09:41:44

标签: javascript ractivejs

我在PactiveJS中使用Pikaday日期选择器作为装饰器,并且想要在装饰器外部访问datepicker的api,但是将它添加到返回对象似乎不起作用。有人可以指出我正确的方向。

http://jsbin.com/lefiyume/1/edit?html,js

2 个答案:

答案 0 :(得分:4)

装饰器被设计成Ractive和外部库之间的可重用桥梁 - 所以不是拥有startdate装饰器和enddate装饰器,最好有一个pikaday装饰器。< / p>

然后,装饰器函数负责管理自己的状态并与Ractive实例进行交互。如果你发现自己试图获得装饰器创建的对象的引用(即Pikaday实例),那么它通常是一个红旗。

这是你可以做到的一种方式:http://jsbin.com/susev/5/edit?html,js,output

在这个例子中,我们将一个keypath传递给装饰器的两个实例。当使用每个pikadayDecorator节点调用<input>函数时,将使用两个参数调用它 - 节点和keypath。 (你可以有其他参数 - 只用逗号分隔它们。)

装饰者然后可以设置双向绑定 - 它观察给定的密钥路径(例如startdateenddate)并调用Pikaday实例的setDate()变化时的方法。当选定的日期发生变化时,我们还使用onSelect()方法更新Ractive的模型 - 这意味着我们可以在模板的其他位置使用日期,甚至可以在Ractive实例之外使用:

ractive.observe('startdate', function (newDate) {
  // This may have been as a result of a `ractive.set()`, or
  // because the user interacted with the datepicker
  console.log('startdate changed to', newDate);
});

(请注意,Pikaday会自动将“2015-01-01”等字符串转换为日期对象。)

more information on creating decorators on the docs

答案 1 :(得分:0)

您需要在saleEndDecorator函数中调用setDate

http://jsbin.com/lefiyume/7/edit