Ember.js - 正确执行(结构、包含、一般问题)

2023-12-30

我正在使用 ember.js,并且不知何故陷入了寻找如何以正确的方式构建结构的困境。我可以跟随所有例子 http://emberjs.com/guides/,但将它们放在一起时遇到一些问题。

我正在使用 require.js 和车把。

我的目录结构如下所示:

- app
- - controllers
- - css
- - helpers
- - lib
- - models
- - routes
- - templates
- - - partials
- - views

我的 application.js 如下所示:

require.config({
    paths:{
        jquery:'lib/jquery-1.7.2',
        handlebars:'lib/handlebars',
        ember:'lib/ember',
        ember_data:'lib/ember-data',
        text:'lib/requireJS/text',
        md5:'lib/md5',
        spin:'lib/spin'
    },

    shim:{
        'ember':{
            deps:[ 'jquery', 'handlebars'],
            exports:'Ember'
        },
        'ember_data':{
            deps:[ 'ember'],
            exports:'DS'
        }
    },

    waitSeconds:15        
});

define('application'
        ,[
            // Routes
            'routes/app_router'

            // Controller
            ,'controllers/application_controller'

            // Views
            ,'views/application_view'
            ,'views/category/category_list_view'

            // Libraries
            ,'jquery'
            ,'handlebars'
            ,'ember'
            ,'ember_data'
            ,'spin'

        ]
        , function (

             // Router
             Router

             // Controller
            ,ApplicationController

             // Views
            ,ApplicationView
            ,CategoryListView

             // Models
            ,Category
            ,Product
        )
    {
        return  Ember.Application.create({

             VERSION: '1.0.0'

            ,rootElement:'#main'

            // Load Router
            ,Router:Router

            // Load Controllers
            ,ApplicationController:ApplicationController

            // Load associated Views
            ,ApplicationView:ApplicationView
            ,CategoryListView:CategoryListView

            // Load Models
            ,Category:Category
            ,Product:Product

            //Persistence Layer,using default RESTAdapter in ember-data.js.
            ,store:DS.Store.create({
                revision:10
                ,adapter:DS.RESTAdapter.create({
                     bulkCommit:false
                    ,serializer:DS.Serializer.create({
                        primaryKey:function (type) {
                            return type.pk;
                        }
                    })
                    ,mappings:{
                        //categories:Category
                    }
                    ,namespace:'api'
                    ,url: "https://example.org"
                })
            })

            ,ready:function () {

            }
        });
    }
);

然后是我的应用程序控制器

define(
    'controllers/application_controller'
    ,['ember' ],
    function () {
        return Ember.Controller.extend({
            init: function() {
            }
        });
    }
);

应用视图:

define('views/application_view', [
        'text!templates/application.html',
        'ember'
    ],
    function(Application_markup) {
        return Ember.View.extend({
            template: Ember.Handlebars.compile( Application_markup ),
            elementId: 'container',
            didInsertElement: function() {
                this.$().hide().show("slow");
            }
        });
    }
);

最后是 application.html 模板

<div id="container">

    <div id="header">
        FOO BAR
    </div>

    <div id="navigation">
        {{outlet mainNavigation}}
    </div>

    <div id="content">

    </div>

    <div id="footer">

    </div>

</div>

我现在想做的是将另一个模板包含到主应用程序模板(category_list)中。我想我要么必须在 HTML 模板本身中执行此操作,要么在应用程序视图中执行此操作 - 但对于后一种情况,我不知道如何配置/解析/绑定多个模板。

构建单独的、独立的、模块化的模板并将它们组合在一起的最佳实践是什么?这究竟应该发生在哪里? 或者这甚至是使用 ember.js 的错误方法?

也许你们中的一位可以让我更清楚一些事情。 谢谢。

EDIT #1

app_router.js

define('routes/app_router',
    ['ember' ],
    function () {
        return  Em.Router.extend({
            enableLogging:true, //useful for development
            /*  location property:  'hash': Uses URL fragment identifiers (like #/blog/1) for routing.
             'history': Uses the browser's history.pushstate API for routing. Only works in modern browsers with pushstate support.
             'none': Does not read or set the browser URL, but still allows for routing to happen. Useful for testing.*/
            location:'hash',
            /*   location: 'history',
             rootURL:'/app',*/
            root:Ember.Route.extend({
                index:Ember.Route.extend({
                    route:'/'

                    /*,connectOutlets:function (router) {
                        //Render application View ,sign in.
                        v = router.get('applicationController').get('view');
                        if (v) v.remove();
                        App.router.get('applicationController').set('loggedin', false);

                        router.get('applicationController').connectOutlet({name:'login', outletName:'loginform'});
                        router.get('loginController').enterLogin();

                    }*/
                })
                /*,contacts:Em.Route.extend({
                    route:'/contacts',

                    showContact:function (router, event) {
                        router.transitionTo('contacts.contact.index', event.context);
                    },

                    showNewContact:function (router) {
                        router.transitionTo('contacts.newContact', {});
                    },
                    logout:function (router) {

                        jQuery.ajax({
                            url:'/site/logout',
                            type:'POST',
                            success:function (response) {
                                if (!response.authenticated) {
                                    router.get('applicationController').set('loggedin', false).get('view').remove();
                                    router.transitionTo('root.index', {});
                                }
                            }
                        })
                    },


                    index:Em.Route.extend({
                        route:'/',
                        connectOutlets:function (router) {
                            if (router.get('applicationController').get('loggedin'))
                                router.get('applicationController').connectOutlet('contacts', App.store.findAll(App.Contact));
                            else   router.transitionTo('root.index');
                        }
                    }),

                    contact:Em.Route.extend({
                        route:'/contact',
                        index:Em.Route.extend({
                            route:'/:contact_id',
                            deserialize:function (router, urlParams) {
                                return App.store.find(App.Contact, urlParams.contact_id);
                                debugger;
                            },

                            showEdit:function (router) {
                                router.transitionTo('contacts.contact.edit');
                            },

                            connectOutlets:function (router, context) {
                                if (router.get('applicationController').get('loggedin'))
                                    router.get('contactsController').connectOutlet('contact', context);
                                else   router.transitionTo('root.index');
                            }
                        }),

                        edit:Em.Route.extend({
                            route:'edit',

                            cancelEdit:function (router) {
                                router.transitionTo('contacts.contact.index');
                            },

                            connectOutlets:function (router) {
                                if (router.get('applicationController').get('loggedin')) {
                                    var contactsController = router.get('contactsController');
                                    contactsController.connectOutlet('editContact', router.get('contactController').get('content'));
                                    router.get('editContactController').enterEditing();
                                } else     router.transitionTo('root.index');
                            },

                            exit:function (router) {
                                router.get('editContactController').exitEditing();
                            }
                        })
                    }),
                    newContact:Em.Route.extend({
                        route:'/contacts/new',

                        cancelEdit:function (router) {
                            router.transitionTo('contacts.index');
                        },

                        connectOutlets:function (router) {
                            if (router.get('applicationController').get('loggedin')) {
                                router.get('contactsController').connectOutlet('editContact', {});
                                router.get('editContactController').enterEditing();
                            } else     router.transitionTo('root.index');
                        },

                        exit:function (router) {
                            router.get('editContactController').exitEditing();
                        }
                    })
                })*/
            })
        });
    }
);

EDIT #2

我现在按如下方式更改了路由器,但它没有执行任何操作。

define('routes/apps_router', ['ember'],
    function () {
        return Em.Router.extend({
            enableLogging:true
            ,location:'hash'

         ,map: function (match) {
            match("/").to("CategoryList", function (match) {
                match("/").to("mainNavigation");
            });
        }

        ,root:Ember.Route.extend({
            index:Ember.Route.extend({
                route:'/'

                ,renderTemplates: function() {
                    this.render('mainNavigation', {
                        into: 'CategoryList'
                    });
                }
           // ....
        });
    }
);

亲切的问候, 克里斯托弗


如果您将最新版本的 ember 与 v2 路由器一起使用,您可以执行以下操作:

App.Router.map(function (match) {
    match("/").to("categoryList", function (match) {
        match("/").to("foo");
    });
});

在您的categoryList模板中,放置一个{{outlet}}(您可以选择命名它)

然后,要插入到categoryList中的模板的路由将如下所示:

App.fooRouter = Ember.Router.extend({
renderTemplates:function () {
        this.render('foo', {
            into:'catergoryList'
        });
    }
})

实践中的一个很好的例子可以在这里找到:https://github.com/sh4n3d4v15/ember-todos https://github.com/sh4n3d4v15/ember-todos

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ember.js - 正确执行(结构、包含、一般问题) 的相关文章

  • Ember 未在生产环境中加载某些图像

    我有一个 Ember cli 1 13 应用程序 它在公共目录中存储了很多图像 现在 它将正确加载除特定组件中的图像之外的所有图像 该组件的调用方式如下 list item url list url name List Name price
  • 在 Ember 中将模型属性插入 Img 元素 URL

    我有一个模型image id财产 我有一个包含图像元素的模型视图 我需要将 id 插入图像元素的src属性来完成图像的 URL 以便我有效地执行此操作 img src 我的第一次尝试使用了 Handlebars 助手 img src 但这也
  • 计算属性应该在模型或控制器中声明吗?

    具有以下用户模型 Sks User DS Model extend firstName DS attr string lastName DS attr string fullName 计算属性应该在哪里声明 fullName Ember c
  • 如何制作具有移动外观的 emberjs 应用程序(如 jquery mobile 中的应用程序)?

    我有一个使用 Emberjs 的简单移动 Web 应用程序项目 对于外观和感觉 我想要类似于 JQuery Mobile 的东西 有没有办法混合使用 Emberjs 和 jquery mobile 如果是这样 怎么办 我查看了 Travis
  • 如何清除ember js中的表单数据

    嗨 我对 ember js 很陌生 我写了一个新员工入职表格 并通过路线发送数据 数据保存成功 但问题是提交表单后我的表单数据没有清除 代码如下 app js App Router map function this resource sa
  • 在 EmberJS 中获取父路由

    我正在制作一个可重用 有点多态 的评论小部件 我想要一个按钮 使我能够返回到父路由 例如 如果我位于 blog posts 1 comments 我希望该按钮将我带回 blog posts 1 我目前正在使用transitionToRout
  • 如何将 hashbang url 更改为历史 API

    我正在使用 ember1 0 rc3 我想将 hashbang url 更改为正常的 url 格式 即 www site com admin page1 到 www site com admin page1 更改 我在应用程序路由器中使用位
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • 使用 EmberData 在本地存储中缓存远程数据

    我有一个关于使用 Ember 加载和缓存远程对象的问题 我正在开发一个 Ember 应用程序 它通过 REST API 使用服务器端存储 一些获取的数据很少发生变化 因此每次应用程序加载时都从服务器获取数据是不必要的 但这对于需要离线工作并
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • 将预编译的车把模板与 Marionette 结合使用

    我正在使用带有 requirejs 的 Marionette 并且我还想使用预编译的车把模板 这是如何运作的 这是我当前的设置 需要 main js requirejs config baseUrl paths text vendor ja
  • Emberjs 将多个控制器加载到一个控制器中

    SCENARIO我目前有一个IndexRoute 我想将另外 3 个控制器加载到其中 另外 3 个控制器称为Sports News Business 我阅读了 embersjs 文档 它指出您需要实现renderTemplate钩入Inde
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • 将检索到的 Ember 数据记录转换为普通对象的 Ember 方法是什么?

    我使用以下方法检索了一系列记录var items store find model 返回的对象是一个实例RecordArray 并包含多个条目 每个条目都有一个 Ember 对象 允许我在记录中获取和设置属性 一切看起来都不错 现在我需要将
  • 将 css 类添加到 Ember.js 中的

    如何将CSS类添加到特定路线上的body标签 我尝试使用body在车把模板中添加标签但不起作用 Update 经过一番谷歌搜索后 我找到了这个解决方案 不确定这是最好的方法 但它确实有效 App SomeRoute Em Route ext
  • 如何调试requireJS模块定义的路径/文件

    我是 RequireJS 世界的新手 我越来越Load Timeout error对于我已经在主文件中定义的模块之一 我在 Chrome 的 网络 选项卡中没有看到任何请求 可能是因为 require 之前已经加载了该文件 我已经迷上了on
  • 有没有办法在 ember 商店中的任何 ember 模型更改上设置观察者?

    首先 我使用的是ember 2 我正在请求后端 它返回一些数据 然后 我将这些数据推送到 ember 存储中的模型 问题是我想在更新此模型时执行一些操作 那么 有没有办法在店里观察模型呢 先感谢您 findAll返回实时数组 因此我们可以为
  • 加载 Ember.View 的内容后初始化 jQuery 插件

    DEBUG Ember VERSION 1 0 0 rc 6 ember js DEBUG Handlebars VERSION 1 0 0 rc 4 ember js DEBUG jQuery VERSION 1 9 1 控制器是一个Em
  • 如何使用 ember.js 进行类似过滤

    我在 ember pre 1 0 中有一个简单的 ArrayController 发现如果过滤器找到给定属性的完全匹配 我可以削减列表 但我似乎找不到的是如何使用过滤器进行 like 查询 如果我搜索包含用户的数组 下面的内容将起作用 fi

随机推荐

  • Android 音频播放的广播意图?

    我正在尝试构建一个 Android 应用程序 它使用广播接收器来检测音乐播放何时开始 然后提供手势控制来触发发送跳过曲目意图 首先 我只想将接收器设置为在音频播放开始时触发通知 以便我可以检查这个概念是否有效 我已经在清单文件中声明了一个服
  • 如何在Python中查找n天前的日期?

    我想写一个脚本 给Python几天的时间 我们称之为d 它给了我我们的日期d几天前 我正在努力处理模块日期时间 import datetime tod datetime datetime now d timedelta days 50 a
  • Java Swing Shift+F10 辅助功能

    Per accessibility requirements Shift F10 is supposed to open right click context menus In Swing one approach is to just
  • 发送电子邮件时出现 SmtpException

    我正在尝试通过我的 C 代码发送电子邮件 但我得到SmtpException 连接尝试失败 因为连接方在一段时间后没有正确响应 或者建立的连接失败 因为连接的主机未能响应 173 194 67 109 587 这是我发送电子邮件的方式 st
  • Ansible 清单可以包含另一个清单吗?

    我们有一组在应用程序的不同实例之间共享的服务器 并希望它们的列表是一个单独的文件 以及其他特定于实例的清单包括 it 我知道 这可以通过dynamic库存 但这些是代码 我们希望保留我们的服务器列表data 可以这么说 对于 INI 库存
  • 未找到 qml XmlListModel 插件

    在我的项目中 我尝试使用 qml 内置的 Xml 列表模块 但是当我编译到手机时 出现此错误 W Qt 20100 assets qml FlickrDemo main qml 4 null assets qml FlickrDemo ma
  • @supports 的功能检测?

    如何检测浏览器是否支持 CSS supports 功能 由于 Internet Explorer 和 Safari 不支持它 因此我的 Web 应用程序不知道在这些浏览器中应用哪些样式 使用纯 CSS 您可以依靠级联来确定浏览器是否理解 s
  • 使用 Gunicorn 部署时如何在 Flask 方法之间共享内存资源

    我使用 Flask 实现了一个简单的微服务 其中处理请求的方法根据请求数据和加载到内存中的相当大的数据结构计算响应 现在 当我使用gunicorn和大量工作线程部署此应用程序时 我只想在所有工作人员的请求处理程序之间共享数据结构 由于数据只
  • LWJGL 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在不同情况下删除Excel中的重复项(VBA)?

    我需要将相应的值汇总到右侧的列中 但也需要删除重复项 这是交易 例如 如果我有从 A 到 F 的列 如果 A 到 E 列与另一行相同 则宏将删除该行并保存旧行 如果 A 至 C 列与另一现有行相同 宏将删除另一行并将 D 和 E 列中的相应
  • 用于交叉编译 BBB 应用程序的工具链

    我的本机是基于ubuntu的14 04 LTS x86 64系统 我想为Beaglebone black交叉编译应用程序和QT程序 这是一个运行在Debian 2015发行版上的基于armv7的系统 我应该在本机系统上安装哪个工具链才能完成
  • NAudio fft 结果给出所有频率的强度 C#

    我有 NAudio 的 wasapi 环回记录和数据 FFT 的工作实现 我得到的大部分数据都是正常的 但每隔一段时间 10 秒到几分钟的时间间隔 它就会显示几乎所有频率上的幅度 基本上 图片从右到左滚动 时间和频率从底部的最低频率开始按对
  • .Net 静态方法及其对并发的影响?

    我目前正在构建一个将由网络服务使用的 API 我想知道如果我使用大量的 API 来构建我的 API 会遇到什么性能问题静态方法 最初的想法是构建充当服务的专家对象 在单用户环境中 这种方法非常棒 但我很快就需要将其移植到多 并发用户环境中
  • Beyond Compare 2 忽略大小写

    如何让 Beyond Compare 2 忽略字母大小写的差异 例如 Foo Bar 和 fOo BAR 将被视为相同 在我拥有的BeyondCompare版本 版本3 3 Pro 中 您可以选择 文本重要 字符大小写除外 要找到此设置 请
  • 如何为 WKWebView 发出的请求设置自定义 HTTP 标头

    我构建了一个包含 WKWebView 的应用程序 并且 Web 视图加载的网站支持多种语言 我怎样才能改变Accept LanguageWKWebView 中的标头 或其他 HTTP 标头 我已经让它以某种方式工作 但只有获取请求才会有自定
  • 如何使正在运行的可执行文件删除自己的文件

    例如 我正在运行可执行文件 TrashClean exe 我希望它删除所有我不想要的文件 并在最后一步删除自身 硬盘驱动器上的 Trash Clean exe 我想知道在 C 中是否可以 请参见如何让您的应用程序立即自行删除 http ww
  • 使用 Spring Boot、Session 和 Redis 创建会话时未复制会话

    我正在尝试使用 Spring Cloud 的 Zuul Eureka 和我自己的服务来实现微服务架构 我有多个具有 UI 和服务的服务 每个服务都可以使用 x509 安全性对用户进行身份验证 现在我试图将 Zuul 放在这些服务之前 由于
  • 如何将文件存储到数据库中?

    如何将用户上传的文件存储到数据库中 我想将文件存储在数据库中 我们该怎么做 在后端 我将 sql 与 c net 应用程序一起使用 此解决方案适用于 SQL SERVER 2005 2008 你必须创建表VARBINARY MAX 作为列之
  • 平静力量布局的初始刻度

    我刚刚开始涉足 d3 发现学习曲线相当陡峭 这个过程与我习惯的完全不同 而且数学大多超出了我的理解范围 无论如何 我的项目由代表系统之间集成地图的部队布局组成 这部分效果非常好 但我确实有一个主要问题 这也体现在 Michael Bosto
  • Ember.js - 正确执行(结构、包含、一般问题)

    我正在使用 ember js 并且不知何故陷入了寻找如何以正确的方式构建结构的困境 我可以跟随所有例子 http emberjs com guides 但将它们放在一起时遇到一些问题 我正在使用 require js 和车把 我的目录结构如