Knockout.jsのwithを使っていなかったことを後悔している件
Knockout.jsにはwithという制御文があるのですが
今まで使うことは無かったです。
でも絶対使った方が良かったと後悔中
例えばこんな構造のデータあります。
var juchu = { juchuNumber: "0001", juchuDate: "2013/11/11", member: { name: "山田太郎", tel: "xxx-xxx-xxxx", show: ko.observable(false), showDetail: function (d, e) { d.show(true); }, }, };
受注オブジェクトの中に会員オブジェクトがあります。
これをwithを使わずにバインドするとこんな感じ
<div data-bind="text: juchuNumber"></div> <div data-bind="text: juchuDate"></div> <div data-bind="text: member.name"></div> <a href="#" data-bind="click: member.showDetail">詳細</a> <!-- ko if: member.show() --> <div data-bind="text: member.tel"></div> <!-- /ko-->
member内のプロパティをバインドするにはmember.を付ける必要があります。
それとshowDetailが実行されたときにも問題が発生します。
引数で渡されるデータが受注オブジェクトなんですよね
ここは会員オブジェクトが来ることを想定しているのでエラーになります。
そこでwithを使います。
<div data-bind="text: juchuNumber"></div> <div data-bind="text: juchuDate"></div> <!-- ko with: member --> <div data-bind="text: name"></div> <a href="#" data-bind="click: showDetail">詳細</a> <!-- ko if: show() --> <div data-bind="text: tel"></div> <!-- /ko--> <!-- /ko-->
これでshowDetailを実行すると
会員オブジェクトがちゃんと渡されます。
これですっきりしました。
なんで早く使わなかったかなー