テンプレートに入力するときに、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);
}
}
}
};
私のテンプレートは正しいようですドキュメンテーションの指示通り
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 がそのようには機能しないように見えるため、各ユーザーをクリックしても実際には何も起こらないことです。このようなイベントを処理します。
people.on({
talk: function(evt){
evt.original.preventDefault();
console.log("I clicked on the template");
}
});
私がやろうとしている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);
}
}
});
RactiveJS はこの仕事に適したライブラリではないでしょうか? 私の検索で私を助けてくれてありがとう。