实现NavigationView时遇到的问题——Sc.View不是可观察的

Trouble implementing NavigationView - Sc.View is not observable

本文关键字:观察 View Sc 遇到 NavigationView 问题 实现      更新时间:2023-09-26

当我尝试使用

将视图推送到我的NavigationView的视图堆栈时
MyApp.getPath('mainPage.mainPane.content.nav').push(MyApp.MyView);

它给了我这个:

Uncaught TypeError: Object function (props) {
      this.__sc_super__ = ret.prototype;
      return this._object_init(props);
    } has no method 'get'

显然,SC.View不兼容KVO。那么这是SproutCore框架中的一个bug吗?因为他们在SC.NavigationView源码中做了这个:

view.get("topToolbar"); // with `view` being the view I passed in as shown above

MyApp.MyView看起来像这样:

MyApp.MyView = SC.View.extend({
    childViews: 'search results'.w(),
    search: SC.TextFieldView.design({
        layout: { centerX: 0, top: 40, width: 400, height: 30 },
        hint: "Search"
    }),
    results: SC.TemplateView.design({
        templateName: 'results'
    }),
    topToolbar: SC.NavigationBarView.design({
        childViews: ['title'],
        layout: { height: 44 },
        title: SC.LabelView.design({
            controlSize: SC.LARGE_CONTROL_SIZE,
            layout: { width: 100, height: 24, centerX: 0, centerY: 0 },
            value: 'Title'
        })
    })
});

但是我认为SproutCore的开发人员比我更聪明,更有经验,所以这可能是我做的。

为什么我的SC.View子类没有get()方法?

看起来你的视图还没有被创建,所以它仍然是一个类而不是一个实例。类没有。get,只有实例。如果你喜欢传递视图(绝对鼓励:)),而不是简单地让childView层次结构处理它们,你也必须创建它们。试试用MyApp.MyView.create()代替。