将视图的布局属性绑定到Object控制器

时间:2011-10-04 10:27:42

标签: sproutcore sproutcore-views

我最近开始使用Sproutcore,这似乎是客户端Web应用程序开发的一个非常好的解决方案。但是,文档并不像我想的那样彻底或简洁,所以我正在努力解决一些问题。

具体来说,我正在尝试将我的一个视图的布局属性绑定到一个对象。我已经在一定程度上管理了这个,因为当渲染视图时它使用对象的属性,但我遇到的问题是当对象更新时,视图的尺寸不会改变。但是,如果更改是持久的并且我重新加载页面,它将使用新值。

绑定布局属性是否有某种限制,以便它们动态更新,或者我在这里有错误的方法?

1 个答案:

答案 0 :(得分:1)

我不确定这种方法是否有效。控制器不应该与视图的属性有任何关系;控制器只能代理对象。

您可能需要考虑的另一种方法是使用adjust类中定义的SC.View方法。您可以让视图在它所代表的模型上观察属性,然后在观察者调用

中观察

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告诉观察者内容对象本身可能会发生变化(如果视图内容对象可以更改)。