Próbuję zawinąć knockout.js w clojurescript, ale jego przekształcanie jest bardzo trudne. Problem, który mam, to odniesienie do "tej" zmiennej. Zastanawiam się nad porzuceniem i użyciem bezpośrednio javascript.zawijanie knockout.js przy użyciu clojurescript
Wziąłem przykłady off http://knockoutjs.com/examples/helloWorld.html i http://knockoutjs.com/examples/contactsEditor.html
udało mi się owinąć łatwe funkcje niektórych makr. Na przykład:
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);
};
staje:
(defviewmodel data
(observing :first_name "Bert")
(observing :last_name "Bertington")
(computing :name [:first_name :last_name]
(str :first_name " " :last_name)))
jednak czegoś mocniej odczuwalna:
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());
Nie jestem pewien, co mogę zrobić w clojurescript dopasować kod jak poniżej: this.allItems.push(this.itemToAdd())
Jakieś myśli?
Jeśli możesz trzymać mocno przez miesiąc, będziemy korzystać z otwartej biblioteki inspirowanej przez Knockout.js, której używamy wewnętrznie w Keming Labs. Miej oko na mój Github (@lynaghk). –
Dzięki Kevin! Naprawdę nie mogę się doczekać zabawy z biblioteką. Istnieje jednak zbyt wiele świetnych bibliotek javascript, które mają podobne typy deklarowania zmiennych, które uzyskują dostęp do innych zmiennych wewnętrznych, których nie ma clojure. Uważam, że ważne jest, aby mieć jasny sposób interpolacji między js i cljs. Im więcej gram w clojurescript i ja javascript, tym bardziej odkrywam, że dobre biblioteki js są w zawiły sposób ... które widziałem tylko po nauce clojure. W każdym razie, mam nadzieję, że dostanę twoje komentarze na moją odpowiedź poniżej – zcaudate
Spójrz na http://fluentsoftware.github.com/cljs-binding/, nie tak dojrzałe jak Knockout, ale .. – edtsech