我正在构建一个Backbone Marionette应用程序。在Marionette你可以做类似的事情:
Marionette.Application.extend({
regions: {
mainRegion: function(){return someCondition?"#A":"#B"},
otherRegion: "#something"
}
})
我正在尝试使用自定义对象在我的应用程序中实现它。实现这一目标的最佳方法是什么? 目前,我正在检查每个值:
if(typeof obj == "function") {
this.data.obj = obj();
}
else {
this.data.obj = obj;
}
或相应的?:表达式。 有更简单的方法吗?
答案 0 :(得分:3)
Underscore有一个result
方法,可以完全按照您的意愿行事(参见http://underscorejs.org/#result)
您可以在此处找到实施:http://underscorejs.org/docs/underscore.html#section-128
答案 1 :(得分:0)
有一个潜在的解决方案(提示尖叫)将value()[不要与valueOf()]混淆到你感兴趣的每个原型。
Function.prototype.value = function(){return this(); }; //可能应该是.call()所以你可以在必要时做参数。
String.prototype.value = function(){return this; };
等
然后你可以对所有的电话使用this.data.obj = obj.value()。
如果您对向原型添加功能感到不安,这不是您想要使用的解决方案。否则你可以编写一个包装函数,它将obj作为参数,并根据类型返回正确的东西。
dandavis提出的鸭子打字理念也很好恕我直言。