javascript - 如何使用 YUI 应用程序框架更改 subview

标签 javascript model-view-controller view yui

我第一次使用 YUI 应用程序框架创建应用程序。所以我仍在尝试了解这一切是如何运作的。

我的应用程序将同时显示多个 View ,这是通过使用嵌套 View 来完成的。导航应用程序时,应该可以仅更改其中一个(子) View ,而无需重新渲染父 View 。

我在这里创建了一个简单的示例:http://jsfiddle.net/casperskovgaard/BDqjz/6/

应用程序将渲染一个包含两个 subview 的 HomePageView。菜单 View 和内容 View 。从菜单 View 中可以更改内容 View 。

渲染主页的代码如下所示:

render: function () {
    Y.log('render homepage view');
    var container = this.get('container');

    container.setHTML(this.template());
    container.one('#menu').setHTML(new Y.MenuView().render().get('container'));
    container.one('#content').setHTML(this.get('content').render().get('container'));

    return this;
}

如果路线改变,内容 View 也会改变。

因为现在是 HomePageView,每次路由更改时,两个 subview 都会重新渲染。

如何更改它,以便在单击菜单 View 中的链接时仅重新呈现内容 View ?

此外,我对如何在 subview 上使用容器属性有点困惑,任何提示将不胜感激

-卡斯帕

最佳答案

根据第一个答案下评论中的进一步描述,我仍然会从“views”属性中删除 MenuView 和其他 subview ,因为它实际上仅用于将成为“activeView”的 View ,而它们不会。

我将使 HomePageView 成为“保留” View ,并使用传递给“showView”的选项对象的“回调”属性来告诉该 View 要显示什么内容。

所以“ View ”现在看起来像:

views: {
    homePage: {type: 'HomePageView', preserve: true}
}

你的处理程序看起来像:

handleFirst: function () {
    this.showView(
        'homePage',
        null,
        { 
            callback: function (view) { 
                view.showContent(Y.FirstView); 
            }
        }
    );
}

我向 HomePageView 添加了一个方法,如下所示:

showContent: function (ctr) {
    Y.log("HomePageView::showContent: " + ctr);
    var container = this.get('container');

    container.one('#content').setHTML((new ctr).render().get('container'));
}

这是最简单的情况,它将 View 的构造函数放入内容区域并每次重新创建它,等等。 HomePageView 的实例没有理由不能保留其 subview 的缓存,并且仅在需要时创建它们,等等。无论哪种方式,关键是当底层 View 成为顶层的“activeView”时,您可以使用回调来操作底层 View 。 (或者,我这样做是在该 View 上触发一个事件,而不是向其传递一些内容,然后在 View 上使用事件处理程序来完成肮脏的工作,但我不知道您对自定义事件有多舒服.)

http://jsfiddle.net/brianjmiller/eP7s2/2/

希望能拍出两幅作品。

关于javascript - 如何使用 YUI 应用程序框架更改 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856268/

相关文章:

javascript - 如何在加载特定 JS 后运行 Javascript 函数?

javascript - soundcloud API - JSON 轨道数与配置文件轨道数不匹配

java - Spring注解MVC返回404

c++ - 对 QSqlTableModel 中的 UI 值进行单位转换

php - 将chunk中的记录插入到mysql View 中

javascript - 从 php 和 css 语句中隐藏具有值/输出的 div

javascript - 安卓浏览器 : programmatically change focused input value

javascript - ExtJS MVC 表单引用

结合UNION ALL的表的VIEW的MySQL性能

java - 在 View 类中保存 sharedPreferences