我尝试在enyo中创建自己的那种
enyo.kind(
{
name: "DeviceButton",
kind: "Button",
caption: "",
published: { userAgent: "" },
flex: 1,
onclick: "butclick",
butclick: function() { console.log("User agent changed to " + this.userAgent) }
})
但是当我点击时没有显示任何内容
如果我刚刚做了
onclick: console.log("User agent changed to " + this.userAgent)
打印出this.userAgent未定义
我做错了什么?
顺便说一句,是否可以通过onclick发送参数(以便对应于点击的函数获取变量)
由于
答案 0 :(得分:2)
你在这里遇到的问题是onclick属性实际上是为Enyo提供事件处理程序的名称,以便在收到点击时将事件发送给。 “butclick”事件不会分派给DeviceButton,而是分配给它的父代。
如果您想完全按照您的类型处理事件,则需要将其设置为“处理程序”。在Enyo 2.x中,你这样做:
enyo.kind(
{
name: "DeviceButton",
kind: "Button",
caption: "",
published: { userAgent: "" },
flex: 1,
handlers {
onclick: "butclick"
},
butclick: function() { console.log("User agent changed to " + this.userAgent) }
})
在Enyo 1.x中,您只需要将处理函数命名为“onclickHandler”。我提到了Enyo 1解决方案,因为我发现你的定义中有“flex:1”。 Enyo 2不支持Flexbox,我们改为使用“Fittable”系统。
答案 1 :(得分:0)
我为你做了一个小例子,enyo如何处理自定义类型的发送和接收值。我还在代码中添加了一些简短的注释。
http://jsfiddle.net/joopmicroop/K3azX/
enyo.kind({
name: 'App',
kind: enyo.Control,
components: [
{kind:'FittableRows', components:[
// calls the custom kind by it's default values
{kind:'DeviceButton',name:'bttn1', classes:'joop-btn',ontap:'printToTarget'},
// calls the custom kind and pass the variables to the DeviceButton kind
{kind:'DeviceButton', name:'bttn2', btnstring:'Get Agent', useragent:'chrome', classes:'joop-btn', ontap:'printToTarget'},
{tag:'div', name:'targetContainer', content:'no button clicked yet', classes:'joop-target'},
]},
],
printToTarget:function(inSender, inEvent){
// inSender = the button that was pressed
this.$.targetContainer.setContent(inSender.name+' has used the value: "'+inSender.getUseragent()+'" and sends the value of: "'+inSender.getValueToPrint()+'" back.');
},
});
enyo.kind({
name:'DeviceButton',
kind:enyo.Control,
components:[
{kind:'onyx.Button',name:'btn', ontap:'printUsrAgent'}
],
published:{
btnstring:'default btnstring', // value that will be received
useragent:'default useragent', // value that will be received
valueToPrint:'default valueToPrint' // value that will be used
},
rendered:function(){
this.inherited(arguments);
this.$.btn.setContent(this.btnstring);
},
printUsrAgent:function(inSender,inEvent){
// set a parameter with the value that was received of if not received use the default value (normaly would do some calculations with it first)
this.valueToPrint = this.useragent+' after changes';
},
});