1

我最近开始在 Sproutcore 工作,这似乎是客户端 Web 应用程序开发的一个非常好的解决方案。但是,文档并不像我想要的那样彻底或简洁,所以我在一些事情上苦苦挣扎。

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

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

4

1 回答 1

1

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

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

this.adjust('height', 30); // or whatever

我认为adjust也可以像这样使用

this.adjust({
    height: 10,
    width: 20,...
})

如果不知道更多关于你想要做什么,很难说更多。

更多详情

好的,所以关于 Sproutcore 的一件事是您需要小心不要妨碍运行循环。不幸的是,这方面的文档不多。我了解到的是,您不希望观察者仅在其范围内观察事物。所以这里是你想要做的事情的大纲。

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

于 2011-10-04T13:19:44.640 回答