我最近开始在 Sproutcore 工作,这似乎是客户端 Web 应用程序开发的一个非常好的解决方案。但是,文档并不像我想要的那样彻底或简洁,所以我在一些事情上苦苦挣扎。
具体来说,我正在尝试将我的一个视图的布局属性绑定到一个对象。我在一定程度上对此进行了管理,因为当呈现视图时,它使用对象的属性,但我遇到的问题是当对象更新时,视图的尺寸不会改变。但是,如果更改是持久的并且我重新加载页面,它会使用新值。
绑定布局属性是否存在某种限制,以便它们动态更新,或者我在这里有错误的方法?
我最近开始在 Sproutcore 工作,这似乎是客户端 Web 应用程序开发的一个非常好的解决方案。但是,文档并不像我想要的那样彻底或简洁,所以我在一些事情上苦苦挣扎。
具体来说,我正在尝试将我的一个视图的布局属性绑定到一个对象。我在一定程度上对此进行了管理,因为当呈现视图时,它使用对象的属性,但我遇到的问题是当对象更新时,视图的尺寸不会改变。但是,如果更改是持久的并且我重新加载页面,它会使用新值。
绑定布局属性是否存在某种限制,以便它们动态更新,或者我在这里有错误的方法?
我不确定这种方法是否有效。控制器不应该与视图的属性有任何关系;控制器只应该代理对象。
您可能要考虑的一种替代方法是使用类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
告诉观察者内容对象本身可能会改变(如果视图内容对象可以改变)。