1

私は最近、Sproutcore で作業を始めました。これは、クライアント側の Web アプリ開発にとって非常に優れたソリューションのようです。ただし、ドキュメントは私が望むほど完全でも簡潔でもないので、いくつか苦労しています。

具体的には、ビューの 1 つのレイアウト プロパティをオブジェクトにバインドしようとしています。ビューがレンダリングされるときにオブジェクトのプロパティを使用するという点で、これをある程度管理しましたが、私が抱えている問題は、オブジェクトが更新されたときにビューの寸法が変わらないことです。ただし、変更が永続的で、ページをリロードすると、新しい値が使用されます。

動的に更新されるようにレイアウト プロパティをバインドする際に何らかの制限がありますか、それともここで間違ったアプローチをしていますか?

4

1 に答える 1

1

このアプローチが機能するかどうかはわかりません。コントローラーは、ビューのプロパティとは何の関係もないと想定されています。コントローラーは、オブジェクトをプロキシすることのみを想定しています。

検討したい代替手段の 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ビューのコンテンツ オブジェクトが変更される可能性がある場合)。

于 2011-10-04T13:19:44.640 に答える