我试图在填充模板时触发一个函数,该函数是我传递给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]();
});

09-28 12:06