我正在開發一個涉及類型層次結構的應用程序,並通過繼承來定義每種類型的模型。當談到編寫相應的控制器時,我不確定如何以一種乾淨的方式來處理整個事情。我應該只爲基礎類型編寫一個能夠處理派生模型的控制器,還是每個子類型應該有一個控制器?應如何設置視圖 - 控制器綁定以使用不同的控制器?如何在sproutcore中實現多態?
回答
下面是關於定義子類和重寫屬性和方法的一些信息: http://wiki.sproutcore.com/w/page/12412971/Runtime-Objects。
從我的(有限)使用Sproutcore,我只能綁定1視圖到1控制器。因此,如果您打算使用單個視圖(例如ListView)來顯示數據,那麼我認爲您只能將該視圖綁定到1個控制器。這意味着能夠處理衍生模型的1個基本類型似乎是要走的路。
通常,您可以使用App.store.find調用的結果填充ArrayController實例的內容。 SC.Store#發現可以採取SC.Query情況下,通常是這樣的:
MyApp.myController.set('content') = MyApp.store.find(SC.Query.local(MyApp.MyModel));
這應返回MyApp.MyModel的所有實例,包括MyApp.MyModel的子類的任何實例。
SC.Query.local的第一個參數可以是SC.Record子類,也可以是引用子類的字符串。所以,如果你有一些中介SC.Record子類,你可能想嘗試在那裏使用它們。
你可能想看看SproutCore的新實驗多態性支持:http://groups.google.com/group/sproutcore-dev/browse_thread/thread/b63483ab66333d15
控制器應該僅僅是對象的代理,與您的模型的單個實例的時候。換句話說,ObjectController可以代理任何東西。這裏是我的意思代碼:
你有兩個對象,人和學生。
App.Person = SC.Object.extend({
// person stuff here
})
App.Student = App.Person.extend({
// student stuff here, you have have all Person things because you are extending person.
})
然後你要定義控制器:
App.personController = SC.ObjectController.create({
contentBinding: 'App.path.to.person'
})
App.studentController = SC.ObjectController.create({
contentBinding: 'App.path.to.student'
})
請注意,您將控制器的內容只綁定到的東西,如果人/學生是一個選擇的結果,或者一些其他的流,其中綁定火。換句話說,如果手動設置的人(從狀態圖說,作爲一個互動的結果),你仍然定義控制器,但會做
App.personController.set('content', person);
您設置的控制器不同,這取決於是否Person是您的應用中的「頂級」對象,或者是一些被選中的中間對象。另外,您可能只需要一個控制器,如果您同時在一個人和一個學生身上執行操作,則只有一個studentController和一個personController。兩者都只是ObjectControllers,並且可以代理任何東西。
最後,在您的看法中,您將相關視圖元素綁定到控制器:
...
nameView: SC.LabelView.design({
layout: {/* props */},
valueBinding: SC.Binding.oneWay('App.personController.name')
})
...
注意,單向綁定,如果該名稱不會對視圖進行更改,如果視圖可以更改名稱,然後只是做一個正常的綁定。還要注意這裏的路徑。由於personController代理對象我不結合
'App.personController.content.name'
,綁定到
'namespace.controller.property-on-object-controller-proxies'
如果你把大量的業務邏輯在你的控制器,你做錯了。控制器應該只是用於代理對象(至少ObjectControllers應該是)。業務邏輯應該在模型本身上,而決策邏輯應該在狀態圖中。
- 1. 如何在C#中實現多態#
- 2. 如何在現有數據庫中實現多態關聯
- 3. Java如何實現接口多態性?
- 4. 如何實現在動態佈局中實現添加更多視圖android
- 5. 在MVC中實現多狀態模型
- 6. 如何在Erlang中實現狀態?
- 7. 如何在c#中實現泛型多態 - 第2部分?
- 8. 如何在嵌套類中實現多態?
- 9. 如何在多個數據庫表中實現動態搜索
- 10. 如何使用虛函數在C++中實現多態行爲?
- 11. 如何在C#中實現某種程度的多態性?
- 12. 如何在c#中實現泛型多態?
- 13. 如何在wpf中實現多線程
- 14. 在Java中實現多核 - 如何?
- 15. 如何在primefaces datalist中實現多選?
- 16. 實現多態的想法
- 17. 多態實現問題
- 18. Sproutcore - rails - 多對多 - json
- 19. 如何實現動態rowspan
- 20. AngularJS如何實現多態/依賴注入(最佳實踐)
- 21. 如何實現多態複選框在WPF的MVVM
- 22. 如何在兩個mixin模板之間實現多態行爲?
- 23. Google App Engine中的JDO:多態關係應該如何實現?
- 24. 如何實現在C靜態圖
- 25. 你如何實現多繼承的多態行爲?
- 26. 如何實現多個接口的多態參數?
- 27. 如何實現GWT多頁
- 28. 如何在使用Array在OCaml中實現Stack時保持多態性?
- 29. 如何在Rails上實現多選3
- 30. 如何在PlayFramework上實現多線程?
嗨,謝謝你的回答。我會嘗試這種方式。仍然想知道是否有可能以不同的方式做到這一點。順便說一句,我正在通過你的清單重新排序教程。這似乎很有幫助。謝謝。 – Dominik 2010-11-24 21:41:08