我已经构建了一个简单的JS类,它在对象上设置了一个侦听器,并在更改事件上触发了一个方法。该方法搜索预加载的配置以找到相应的值,然后处理该值。看起来我无法从触发方法内部访问父对象的属性,除非它作为一个额外的参数传递。
class allEars{
constructor(){
$('#selectObj').on('change',{cfg: this}, function(ev){
var cfg = ev.data.cfg;
var retVal = null;
for(const prop in cfg)if(cfg.optList.optID==$(this.val()))retVal=cfg.optList[prop].txt;
});
$('#tgtObj').val(retVal).trigger("change",{p: 'param'});
}
async init(){// usually pulled from db, hence async
var optList={
777: {optID: '1', txt: "first option"},
123: {optID: '2', txt: "second option"},
969: {optID: 'n', txt: "option n"}
};
};
}
<body>
<select id="selectObj">
<option value="1">This</option>
<option value="2">That</option>
<option value="n">Other</option>
</select>
<input type="text" id="tgtObj" val=""/>
</body>
字符串
这是通常的行为,还是有更直接的方法?
1条答案
按热度按时间ubby3x7f1#
问题是数据未正确传递给回调函数。在建构函式中,您会将数据当做对象常值传递至回呼函式。但是,当调用回调函数时,数据将作为字符串传递。这是因为当对象常值传递至回呼函式时,会将它转换为字串。要解决此问题,需要将数据作为引用传递给回调函数。一种方法是使用arrow函数语法。下面是修复后的代码:
字符串