我有一个Polymer元素,公共API应该允许绑定到用户可以定义的函数,即它应该允许传入函数实现。我尝试了很多方法,但只有1个工作。现在我想知道这是否是正确/正确的方式。
重新说明:将函数绑定为dom-module
的公共API的一部分的正确方法是什么?我实现这一目标的唯一方法如下:
<dom-module id="channel-search">
<template>
<remote-dropdown
id="dropdown"
label-text="Type channel name"
url='{{_findRecordUrl}}'
url-transformer='{{urlTransformer}}'
result-to-list-transformer='{{resultToListTransformer}}'
class="layout horizontal"
style='width: 100%'>
</remote-dropdown>
</template>
</dom-module>
<script>
(function() {
Polymer({
is: 'channel-search',
properties: {
_findRecordUrl: {
type: String,
value: 'http://127.0.0.1:9292/epics-boot-info.psi.ch/find-channel.aspx'
}
},
/*
* Here in the attached function, I define the methods which will then be bound to
* the respective properties of the remote-dropdown element
*/
attached: function() {
this.urlTransformer = function(baseUrl, currentInput) {
return baseUrl + '/' + currentInput;
};
this.resultToListTransformer = function(findRecordList) {
var responseList = findRecordList.map(function(res) {
return res.Channel;
});
return responseList;
};
}
});
})();
</script>
因此,我需要在attached
回调中定义函数,以便将它们正确绑定到remote-dropdown
元素的公共API。
我希望它会更清晰/更容易,也许是这样:
<script>
(function() {
Polymer({
is: 'channel-search',
properties: {
_findRecordUrl: {
type: String,
value: 'http://127.0.0.1:9292/find-channel.aspx'
}
},
urlTransformer: function(baseUrl, currentInput) {
return baseUrl + '/' + currentInput;
};
resultToListTransformer: function(findRecordList) {
var responseList = findRecordList.map(function(res) {
return res.Channel;
});
return responseList;
};
});
})();
</script>
即。只需将函数实现定义为元素定义的一部分,然后将它们绑定到嵌入的remote-dropdown
元素。然而,这似乎从来没有像我想象的那样(也没有变化) - 当然也是因为我对Polymer / Javascript内部的了解有限。
我的问题是:使用attached
回调的解决方案是否正确实现我想做的事情?如果没有,那么实现这个的正确方法是什么?