このアプローチが機能するかどうかはわかりません。コントローラーは、ビューのプロパティとは何の関係もないと想定されています。コントローラーは、オブジェクトをプロキシすることのみを想定しています。
検討したい代替手段の 1 つは、クラスadjust
で定義されたメソッドを使用することです。SC.View
ビューが表すモデルのプロパティを観察し、オブザーバー呼び出しでビューを観察することができます
this.adjust('height', 30); // or whatever
adjust
のようにも使えると思います
this.adjust({
height: 10,
width: 20,...
})
あなたがやろうとしていることについてもっと知らなければ、それ以上言うのは難しい.
もっと詳しく
Sproutcore についての 1 つのことは、実行ループの邪魔にならないように注意する必要があるということです。残念ながら、これに関するドキュメントはあまりありません。私が学んだことは、オブザーバーが自分の範囲内だけで物事を観察することを望んでいないということです。というわけで、やりたいことの概要を以下に示します。
SC.View.extend({
layout: {...}, // initial properties
// binding to the text field that adjusting depends on, NOT on
// this view's content
outsidePropertyBinding: "binding.to.textField",
outsidePropertyDidChange: function(){
var outsideProperty = this.get('outsideProperty');
this.adjust({
// as shown before
})
}.observes('outsideProperty') // <-- this is how you create an observer
});
ここで示したのは、このビューの外で変化している何かに基づいて調整する方法です。私が作成しました
1) SC が更新する外部プロパティへのバインディング
2) 値が設定されるとすぐに起動し、ビューを調整する、バインドされたプロパティのオブザーバー。オブザーバーは、ビューの外ではなく、ビュー内のプロパティを観察しています。
ビューが何らかのコンテンツにバインドされていて、そのコンテンツ自体のプロパティが変更される場合は、少し異なる方法で行うことに注意してください。外部プロパティへのバインディングは必要ありません。代わりに、単に観察することができます'*content.relevantproperty'
。*
beforeは、コンテンツ オブジェクト自体が変更される可能性があることをオブザーバーに伝えます(content
ビューのコンテンツ オブジェクトが変更される可能性がある場合)。