我试图在填充模板时触发一个函数,该函数是我传递给RactiveJS的数据对象的一部分。我已经尝试了其他一些库,但是找不到所需的库。这是我正在做的事情的描述,我希望有人可以建议一个图书馆来做我想做的事情。
服务正在向我的应用程序提供一个类似于以下内容的JSON对象
var data = {
"users": {
"Aaron": {
"age": "31",
"level": "legit",
"talk": function(){
console.log("Howdy! I'm " + this.level);
}
},
"Pete": {
"age": "30",
"level": "godlike",
"talk": function(){
console.log("Howdy! I'm " + this.level);
}
}
}
};
我的模板似乎是正确的,按照Documentation的指示
var usersTemplate = "<ul>{{#users:name}}<li><a href='#' on-click='talk'>{{name}} says:</li>{{/users}}</ul>";
然后我建立一个新的Ractive实例
var people = new Ractive({
el: "#userlist",
template: usersTemplate ,
data: data
});
麻烦的是,单击每个用户实际上不会执行任何操作,因为RactiveJS似乎无法正常工作。它处理诸如this之类的事件。
people.on({
talk: function(evt){
evt.original.preventDefault();
console.log("I clicked on the template");
}
});
我想做的是在我不知道 Controller 名称的情况下,在我传入的数据对象内部触发
action
函数。在模板和数据对象中进行指定就足够了。Ractive提供了我可以遍历数据对象的足够信息,但这还不够好。
people.on({
talk: function( evt ) {
evt.original.preventDefault();
var pointer = json_output;
var path = evt.keypath.split(".");
for( var i = 0; i < path.length; i++){
console.log(i);
pointer = pointer[path[i]];
}
if(pointer.hasOwnProperty("action") && typeof(pointer.action) === "function") {
pointer.action(evt);
}
}
});
JSBin Example
RactiveJS不是适合该工作的库吗?提前感谢您为我的搜索提供帮助。
最佳答案
尽管Ractive不允许您直接调用函数,但它支持事件参数,因此有一个非常好的解决方法:
<a on-click="call:talk">Talk</a>
var ractive = new Ractive({
el: "#userlist",
template: usersTemplate,
data: data
});
ractive.on('call', function ( event, method ) {
event.context[method]();
});