我最近开始使用Sproutcore,这似乎是客户端Web应用程序开发的一个非常好的解决方案。但是,文档并不像我想的那样彻底或简洁,所以我正在努力解决一些问题。
具体来说,我正在尝试将我的一个视图的布局属性绑定到一个对象。我已经在一定程度上管理了这个,因为当渲染视图时它使用对象的属性,但我遇到的问题是当对象更新时,视图的尺寸不会改变。但是,如果更改是持久的并且我重新加载页面,它将使用新值。
绑定布局属性是否有某种限制,以便它们动态更新,或者我在这里有错误的方法?
答案 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
告诉观察者内容对象本身可能会发生变化(如果视图内容对象可以更改)。