Estoy tratando de envolver knockout.js en clojurescript pero está volviéndose muy difícil. El problema que estoy teniendo es la referencia a la variable 'this'. Estoy pensando en renunciar y solo usar javascript directamente.envolviendo knockout.js usando clojurescript
He tomado ejemplos de http://knockoutjs.com/examples/helloWorld.html y http://knockoutjs.com/examples/contactsEditor.html
He conseguido envolver funciones fáciles con algunas macros. Por ejemplo:
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);
};
se convierte en:
(defviewmodel data
(observing :first_name "Bert")
(observing :last_name "Bertington")
(computing :name [:first_name :last_name]
(str :first_name " " :last_name)))
Sin embargo, algo más difícil como:
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());
No estoy seguro de lo que puedo hacer en clojurescript para que coincida con un código como este: this.allItems.push(this.itemToAdd())
¿Alguna idea?
Si puedes mantenerte firme durante un mes, estaremos comprando abiertamente la biblioteca observable computada inspirada en Knockout.js que hemos estado usando internamente en Keming Labs. Vigila mi Github (@lynaghk). –
Gracias Kevin! Estoy deseando jugar con la biblioteca. Sin embargo, existen demasiadas bibliotecas de javascript geniales que tienen problemas similares de declaración de variables que acceden a otras variables internas que no tiene Clojure. Siento que es importante tener una forma clara de interpolar entre js y cljs. Cuanto más juego con clojurescript y javascript, más me doy cuenta de que las bibliotecas de js buenas están en una forma lisa ... que solo vi la conexión después de aprender clojure. De todos modos, espero obtener tus comentarios sobre mi respuesta a continuación, – zcaudate
. Echa un vistazo a http://fluentsoftware.github.com/cljs-binding/, no tan maduro como Knockout, pero ... – edtsech