У меня вопрос с моей точки зрения с утра, и я не могу найти решение.Polymer: callback VS event
У меня есть два шаблона, построенных с использованием полимера.
Вопрос в том, что является лучшим решением, чтобы заставить их обоих общаться? Обратный звонок или событие? И почему?
Пример:
У меня есть элемент (мой-пары-vehcle), которые позволяют вам выбрать радио (автомобиль или группу транспортных средств), и откроется диалоговое окно. Когда вы нажимаете кнопку «отправить» в диалоговом окне, если ваш выбор был «транспортным средством», он отправит ответное событие, если ваш выбор был «группой транспортных средств», он будет использовать обратный вызов.
Какое лучшее решение и почему?
Большое спасибо!
первый элемент:
<dom-module id="my-param-vehicle">
<style></style>
<template>
<div>
<paper-radio-group on-iron-activate="_setVehicleOrGroup">
<paper-radio-button name="Vehicle">[[i18n("vehicles")]]</paper-radio-button>
<paper-radio-button name="VehicleGroup">[[i18n("vehiclesGroup")]]</paper-radio-button>
</paper-radio-group>
</div>
<my-dialog-selector id="dialog"></my-dialog-selector>
</template>
<script>
Polymer({
is: 'my-param-vehicle',
created : function() {
this.i18n = i18n.getInstance();
},
ready : function ready() {
this.addEventListener("vehicle-selected", this._processVehicles.bind(this));
},
_setVehicleOrGroup : function _setVehicleOrGroup (e) {
var itemName = e.detail.item.name;
if (itemName == "Vehicle") {
var dialogType = "Vehicle",
params = {
"setData" : true,
"type" : "Vehicle",
"event" : "vehicle-selected"
};
} else if (itemName == "VehicleGroup") {
var dialogType = "entityGroup",
params = {
"setData" : true,
"type" : "vehicleGroups",
"cb" : this._processGroup.bind(this)
};
}
this.$.dialog.setData(dialogType, (params || false));
},
_processGroup : function _processGroup (e) {
// do stuff
},
_processVehicles : function _processVehicles (e) {
// do stuff
}
});
</script>
</dom-module>
диалог:
<dom-module id="my-dialog-selector">
<style></style>
<template>
<div class="buttons">
<paper-button id="okButton" on-click="_send" disabled>[[i18n("validate")]]</paper-button>
</div>
</template>
<script>
Polymer({
is: 'my-dialog-selector',
created : function() {
this.i18n = i18n.getInstance();
},
setData : function setData (type, params) {
this.dataType = params.type;
if (params.cb) {
this.callback = params.cb;
}
if (params.event) {
this.eventName = params.event;
}
this._setGroupsList(params.type);
},
_send : function _send() {
if (this.callback) {
this.callback("CALLBACK");
}
if (this.eventName) {
this.fire(this.eventName, "EVENT");
}
},
});
</script>
</dom-module>