Sto cercando di avvolgere knockout.js in clojurescript, ma è molto difficile. Il problema che sto avendo è il riferimento alla variabile "this". Sto pensando di rinunciare e usare solo javascript direttamente.wrapping knockout.js con clojurescript
Ho preso esempi off http://knockoutjs.com/examples/helloWorld.html e http://knockoutjs.com/examples/contactsEditor.html
Sono riuscito ad avvolgere funzioni semplici con alcune macro. Per esempio:
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);
};
diventa:
(defviewmodel data
(observing :first_name "Bert")
(observing :last_name "Bertington")
(computing :name [:first_name :last_name]
(str :first_name " " :last_name)))
Tuttavia, per qualcosa di più simile:
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());
Non sono sicuro di quello che posso fare in modo che corrisponda ClojureScript codice come questo: this.allItems.push(this.itemToAdd())
Qualche idea?
Se riesci a tenerti stretto per un mese, apriremo la libreria di calcolo computabile osservabile ispirata a Knockout.js che abbiamo utilizzato internamente a Keming Labs. Tieni d'occhio Github (@lynaghk). –
Grazie Kevin! Non vedo davvero l'ora di giocare con la biblioteca. Tuttavia, ci sono troppe grandi librerie javascript là fuori che hanno tipi simili di problemi nel dichiarare variabili che accedono ad altre variabili interne che il clojure non ha. Sento che è importante avere un modo chiaro per interpolare tra js e cljs. Più gioco con clojurescript ee javascript, più trovo che buone librerie js sono in un modo lusingato ... che ho visto solo la connessione dopo aver imparato il clojure. Comunque, spero di ottenere i tuoi commenti sulla mia risposta sotto – zcaudate
Dai un'occhiata a http://fluentsoftware.github.com/cljs-binding/, non così maturo come Knockout, ma .. – edtsech