我不確定這種方法是否有效。控制器不應該與視圖的屬性有任何關係;控制器只能代理對象。
您可能想要考慮的一種替代方法是使用SC.View
類中定義的adjust
方法。你可以有你的觀點觀察它代表模型中的屬性,然後在觀察員發言
this.adjust('height', 30); // or whatever
我覺得adjust
也可以像
this.adjust({
height: 10,
width: 20,...
})
使用,無需更多地瞭解你正在努力去做,它很難說更多。
更詳細
好了,一件事SproutCore的是,你需要小心在runloop的方式沒有得到。不幸的是,這方面沒有太多文件。我所學到的是你不想觀察者只在他們的範圍內觀察事物。所以這裏是你想要做什麼的概述。
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'
。在content
之前的*
告訴觀察者內容對象本身可能改變(如果視圖內容對象可以改變)。
你能顯示相關的代碼嗎? – hvgotcodes