私はknockout.jsをクローズアップでラップしようとしていますが、それは非常に難しいことです。私が持っている問題は、 'this'変数への参照です。私はあきらめて、ただjavascriptを直接使うことを考えています。clojurescriptを使ってknockout.jsをラップする
私はいくつかのマクロで簡単に機能をラップするために管理してきましたhttp://knockoutjs.com/examples/helloWorld.htmlとhttp://knockoutjs.com/examples/contactsEditor.html
オフの例を撮影しました。たとえば:
var ViewModel = function() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(function() {
// Knockout tracks dependencies automatically. It knows that fullName depends on firstName and lastName, because these get called when evaluating fullName.
return this.firstName() + " " + this.lastName();
}, this);
};
は次のようになります。
(defviewmodel data
(observing :first_name "Bert")
(observing :last_name "Bertington")
(computing :name [:first_name :last_name]
(str :first_name " " :last_name)))
しかし、困難のようなもののために:
var BetterListModel = function() {
this.itemToAdd = ko.observable("");
this.allItems = ko.observableArray(["Fries", "Eggs Benedict", "Ham", "Cheese"]); // Initial items
this.selectedItems = ko.observableArray(["Ham"]); // Initial selection
this.addItem = function() {
if ((this.itemToAdd() != "") && (this.allItems.indexOf(this.itemToAdd()) < 0)) // Prevent blanks and duplicates
this.allItems.push(this.itemToAdd());
this.itemToAdd(""); // Clear the text box
};
this.removeSelected = function() {
this.allItems.removeAll(this.selectedItems());
this.selectedItems([]); // Clear selection
};
this.sortItems = function() {
this.allItems.sort();
};
};
ko.applyBindings(new BetterListModel());
私はこのようなコードを一致させるclojurescriptに何ができるかわかりません。 this.allItems.push(this.itemToAdd())
あなたのJavaScriptのthis
動的バインディングを明示的に参照する必要がある場合
Keming Labsで内部的に使用していたKnockout.jsに似たCompute-Observablesライブラリの提供を1か月間続けていただければ幸いです。私のGithub(@lynaghk)を見守ってください。 –
ありがとうKevin!私は本当に図書館で遊ぶのを楽しみにしています。しかし、クローズされていない他の内部変数にアクセスする変数を宣言するのと同様のタイプの問題を持つあまりにも多くの素晴らしいjavascriptライブラリがあります。私は、jsとcljの間を補間する明確な方法を持つことが重要であると感じています。 clojurescript ande javascriptで遊ぶほど、良いjsライブラリは淡々としています... clojureを学んだ後、私は接続を見ただけです。とにかく、私の答えにあなたのコメントを得ることを望む – zcaudate
http://fluentsoftware.github.com/cljs-binding/を見て、ノックアウトとして成熟していないが、.. – edtsech