如何共享ractive组件之间的行为

时间:2015-07-11 17:01:35

标签: ractivejs

或许这更像是一个基本的javascript问题,而不是Ractivejs。

如何向Ractive组件添加共享行为...例如,如果多个组件具有strip_whitspace()方法,我该如何避免在每个组件中重复它?

提前感谢您提供的任何javascript或Ractivejs洞察力。

2 个答案:

答案 0 :(得分:4)

通常的方法是使用extend,这看起来就像你在传统的OOP中继承的那样。在引擎盖下,它使用原型继承。

var CommonClass = Ractive.extend({
  // define common stuff
  strip_whitspace : function(){...}
});

var FirstClass = CommonClass.extend({
  // FirstClass stuff
});

var SecondClass = CommonClass.extend({
  // SecondClass stuff
});

如果您更喜欢动态构建对象而不是强制继承的组合方法,则可以始终使用其他库中的扩展函数,例如lodash的defaults。我更喜欢这种方法,因为我可以从多个公共对象继承。

var UtilsMixin = {
  strip_whitspace : function(){...}
};

var AnotherMixin = {...};

var FirstClass = Ractive.extend(_.defaults({
  // FirstClass stuff
}, UtilsMixin));

var SecondClass = Ractive.extend(_.defaults({
  // SecondClass stuff
}, UtilsMixin, AnotherMixin));

答案 1 :(得分:3)

您还可以在RactiveJS中查看 Frequently Used Expressions 。如果经常使用特定表达式,则可以将该表达式添加到Ractive的默认数据中,如下所示:

var helpers = Ractive.defaults.data;

helpers.fromNow = function(timeString){
  return moment(timeString).fromNow()
}

helpers.formatTime = function(timeString){
  return moment(timeString).format("ddd, h:mmA");
}

helpers.humanizeTime = function(timeString){
  return moment.duration(timeString).humanize();
}