Javascript 聚合物&x2B;Meteor,在blaze#每个环中,无法将对象传递到聚合物网络组件
在Polymer中,不与Meteor组合,只需将对象传递给属性,即可将对象传递给Polymer web组件。我在这方面做得很成功。 在这里,我们将“状态”从迭代直接传递到名为 州卡Javascript 聚合物&x2B;Meteor,在blaze#每个环中,无法将对象传递到聚合物网络组件,javascript,meteor,polymer,meteor-blaze,Javascript,Meteor,Polymer,Meteor Blaze,在Polymer中,不与Meteor组合,只需将对象传递给属性,即可将对象传递给Polymer web组件。我在这方面做得很成功。 在这里,我们将“状态”从迭代直接传递到名为 州卡 在自定义聚合元素上设置属性时,聚合元素会在设置元素原型上的值时尝试检测类型并强制转换属性,因此数字就是数字,字符串就是字符串,等等。当你不在另一个聚合物元素中设置这个属性时,事情就变得有点困难了——就像试图用blaze(我想还有其他任何非聚合物引擎)来设置它一样 Polymer最终会在对象文本上运行.toStrin
在自定义聚合元素上设置属性时,聚合元素会在设置元素原型上的值时尝试检测类型并强制转换属性,因此数字就是数字,字符串就是字符串,等等。当你不在另一个聚合物元素中设置这个属性时,事情就变得有点困难了——就像试图用blaze(我想还有其他任何非聚合物引擎)来设置它一样 Polymer最终会在对象文本上运行
.toString()
,从而生成“[object object]”,而这几乎没有什么用处。幸运的是,polymer允许您将对象作为双引号JSON字符串从外部世界传递进来,就像JSON.stringify(something)
的结果一样
最直接但不那么优雅的方法是创建一个stringify助手并使用它来设置属性
Template.registerHelper('stringify', function(obj) {
return JSON.stringify(obj);
});
{{#each things}}
<my-component something={{stringify this}}></my-component>
{{/each}}
Template.registerHelper('stringify',函数(obj){
返回JSON.stringify(obj);
});
{{{每件事}
{{/每个}}
或
Template.registerHelper('stringThis',function(){
返回JSON.stringify(this);
});
{{{每件事}
{{/每个}}
另一个选项是在应用程序的某个级别重写toString
方法。使用meteor的文档转换或集合帮助程序
包,您可以添加一个只返回JSON.stringify(this)的toString
方法—如果您在游标上迭代
但是,很难重写Object.prototype.toString
并执行同样的操作。您将得到循环引用错误,但在将对象(this
)传递给JSON.stringify之前,似乎有几个库和方法来取消对象的循环。我还没试过这个,但似乎可以用
无论哪种方式,如果属性设置为JSON,它将作为聚合元素中的实际对象提供。您甚至可以在该对象内的嵌套属性上设置观察者
底线-似乎还没有一个完美的方法,所以现在就把对象字符串化。希望有帮助 UI.registerHelper是旧语法,现在是Template.registerHelper。非常感谢Greg!!!阅读你的回复,我意识到我在其他SO帖子上看到了你答案的“部分”,但并没有像你那样把整个概念放在一起。我得到了stringify的概念。然而,在定制的Polymer元素中,我得到了stringized的JSON对象,但是,如何让它绑定到Polymer元素中的HTML元素呢。例如,如果我的Polymer元素具有属性:attributes=“stateObj”,并且元素的模板具有{{stateObj.name},则它似乎不会转换为对象。再次,非常非常感谢@ChrisRussi尝试将stateObj初始化为元素构造函数中的空对象。您可能可以使用发布对象(而不是在属性中声明),或者在创建的回调中使用。不是积极的,但值得一试shot@Greg ... 啊对!!,事实上,我曾经做过,然后把它移除了。我完全知道你在说什么。我今晚到家后会试试的。我非常感谢你的回答。我一直在努力学习1)学习流星2)学习聚合物3)结合两者。。。这确实增加了努力的程度。我有预感,这会奏效的。谢谢格雷格@格雷格。。。令人惊叹的!它现在正在运作。我加了:Polymer('state-card',{stateObj:{},…,这就成功了。我非常感谢你们的帮助。现在,我想起了我在最初的Differential Polymer演示视频中看到你们的地方……你们真是太棒了。
Template.registerHelper('stringThis', function() {
return JSON.stringify(this);
});
{{#each things}}
<my-component something={{stringThis}}></my-component>
{{/each}}