仅在Polymer中,无需将其与Meteor结合即可将对象传递给聚合物纤网组件,只需将其传递给属性即可。我已经成功做到了。在这里,我们将迭代中的“状态”直接传递到称为状态卡的自定义聚合物Web组件中。
<template repeat="{{state in states}}">
<state-card class="state-card" stateObj={{state}}></state-card>
</template>
但是,在我的项目中,我将Polymer和Meteor结合在一起。
Polymer的模板和Meteor的blaze模板不能混合使用...因此,仅使用自定义Polymer Web组件即可实现这一点。我无法在流星模板中通过“ #each循环”传递流星中的“状态”对象。作为一个工作回合,我发现只能像这样将单个属性作为文本字符串传递...
<template name="inbox">
<div class="content" flex>
{{#each states}}
<state-card class="state-card" name={{name}} status={{status}} displayType={{displaytype}}></state-card>
{{/each}}
</div>
</template>
为了实现上述目的,这是来自定制的Polymer Web组件的代码片段,其属性如下:
<polymer-element name="state-card" attributes="name status displayType" on-click="cardClicked">
<template>
...
</template>
</polymer-element>
我“真正”想要做的就是像这样将对象直接传递到聚合物纤网组件中……但是,不幸的是,这根本行不通
<template name="inbox">
<div class="content" flex>
{{#each states}}
<state-card class="state-card" stateObj={{this}}></state-card>
{{/each}}
</div>
</template>
理想情况下,我应该能够接受具有这样的属性的对象...
<polymer-element name="state-card" attributes="stateObj" on-click="cardClicked">
<template>
...
</template>
</polymer-element>
这样的问题/答案与我的问题“非常”相似,但是答案没有用,因为我有流星火焰模板并发症...
我“真的”不想坚持我的一轮工作……即使它可行。
我在SO的其他地方已经读到过,在大火的#each迭代中,您可以像这样访问对象文字...
{{#each humans}}
{{this}}
{{/each}}
但是,我无法完成这项工作。对于任何帮助和指导,我将不胜感激。我知道我要尝试做的工作,将Polymer和Meteor结合起来会有些问题,但是,我已经看到了它的完成,并且取得了很多进步。在这一点上,我只是绊脚石。谢谢!!!
在自定义聚合物元素上设置属性时,聚合物会在设置元素原型的值时尝试检测类型并强制转换属性,因此数字是数字,字符串是字符串,等等。您不是在另一个聚合物元素中设置此属性-就像尝试使用blaze(和我想象的任何其他非聚合物引擎)来设置它一样。
Polymer最终.toString()
在您的对象文字上运行,该文字产生“ [object Object]”,几乎没有用。幸运的是,Polymer允许您将对象作为来自外部世界的双引号JSON字符串传递,例如的结果JSON.stringify(something)
。
最直接但不是最优雅的方法是创建一个字符串化助手,并使用它来设置属性。
Template.registerHelper('stringify', function(obj) {
return JSON.stringify(obj);
});
{{#each things}}
<my-component something={{stringify this}}></my-component>
{{/each}}
或者
Template.registerHelper('stringThis', function() {
return JSON.stringify(this);
});
{{#each things}}
<my-component something={{stringThis}}></my-component>
{{/each}}
另一种选择是toString
在应用程序中的某个级别覆盖该方法。使用流星的文档转换或collection-helpers
包,您可以添加一个toString
仅返回JSON.stringify(this)的方法-如果要遍历游标。
但是,仅重写Object.prototype.toString
并执行相同操作非常困难。您会收到循环引用错误,但是看起来有一些库和方法可以在将对象(this
)传递给JSON.stringify之前回收对象。我没有尝试过,但似乎可以。
无论哪种方式,如果将该属性设置为JSON,它将在您的polymer元素中用作实际对象。您甚至可以在该对象内的嵌套属性上设置观察者!
底线-似乎还没有一种完美的方法,因此现在将对象字符串化。希望有帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句