kickstrapでknockout.jsを使う場合のメモ書き


kickstrapでknockout.jsを使う場合は、まずkickstrap.lessで@appsのknockoutのコメントを外します

kickstrap.less

@apps: "pinesnotify, //qunit, //bootstrap, //bootstrap/transition, knockout, //updater";


こうすることでKickstrap/apps/knockout/config.ksに記載してあるファイルが読み込まれるようになります

knockout/config.ks

http://netdna.getkickstrap.com/Kickstrap/apps/knockout/knockout.min.js, //knockout.min.js
http://netdna.getkickstrap.com/Kickstrap/apps/knockout/view.model.js, //view.model.js

view.model.jsというものが定義してあるのにちょっと引っかかりました。
view.model.jsはknockout.jsの簡単なサンプルなんですがこれが読み込まれるようになります。

view.model.js

// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
    this.welcomeMessage = "Knockout JS is Running!";
}

// Activates knockout.js
ko.applyBindings(new AppViewModel());


なので、他の場所に頑張ってknockout.jsの処理を書いても、こっちが先に読み込まれるようでブラウザのコンソールの以下のようなエラーがでて悩まされることになります。
addTodoをhtml側でdata-bind属性に書いていたんですが上記のview.models.jsには定義されてないのでエラーになってます。

Uncaught Error: Unable to parse bindings.
Message: ReferenceError: addTodo is not defined;
Bindings value: submit: addTodo 


正しく使うには、view.model.jsをそのまま編集するか、apps以下に別のフォルダ(例えばmyapp)を作り
myapp/config.ksに

http://netdna.getkickstrap.com/Kickstrap/apps/knockout/knockout.min.js, //knockout.min.js
myapp.js

などと書いて

myapp/myapp.jsに自前の処理を書けばうまくいくと思います。


その場合はkickstrap.lessの@appsにmyappを記載します。
kickstrap.less

@apps: "pinesnotify, //qunit, //bootstrap, //bootstrap/transition, //knockout, //updater, myapp";