2011-10-04 105 views
1

我最近開始在Sproutcore中工作,這似乎是客戶端Web應用程序開發的一個非常好的解決方案。但是,文檔並不像我想的那麼徹底或簡潔,所以我正在努力解決一些問題。將視圖的佈局屬性綁定到對象控制器

具體而言,我試圖將我的一個視圖的佈局屬性綁定到一個對象。我已經在一定程度上管理了這一點,因爲當渲染視圖時,它使用了對象的屬性,但是我遇到的問題是當對象更新時,視圖的尺寸不會改變。但是,如果更改是持久性的並且我重新加載頁面,它將使用新值。

在綁定佈局屬性中是否存在某種限制,以便它們動態更新,還是我在這裏有錯誤的方法?

+0

你能顯示相關的代碼嗎? – hvgotcodes

回答

1

我不確定這種方法是否有效。控制器不應該與視圖的屬性有任何關係;控制器只能代理對象。

您可能想要考慮的一種替代方法是使用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之前的*告訴觀察者內容對象本身可能改變(如果視圖內容對象可以改變)。

+0

聽起來很有希望。目前,我所做的只是試圖熟悉這個框架,並嘗試一些我需要的技術來開始我想要開始的項目。具體來說,我在這裏要做的就是創建一個View,當用戶調整文本框或類似的內容時,它會改變大小。 我不認爲你可以爲你所建議的方法提供一些示例代碼?它看起來像我之後,但我不知道如何在View中創建觀察者,因爲這不是我在任何文檔中遇到的。 – Jim

+0

@jiminizer,你是什麼意思'調整文本框'。您的意思是用戶將在文本框中輸入一個值,然後您將設置佈局在*不同*視圖上? – hvgotcodes

+0

該文本框將位於view1中,更改該值將更改view2的大小。無論如何,你的迴應非常有幫助,這正是我一直在尋找的。稍後我會放棄它,但現在,我會接受這個答案。謝謝! – Jim

相關問題