问题标签 [ember-app-kit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1071 浏览

ember.js - Ember App Kit 和测试模型钩子

在 Ember App Kit 中,初始 repo 附带了许多测试示例。其中之一是基本的路由单元测试。如果数据在模型钩子中硬编码,则此测试很简单,如下所示:

如果模型钩子从 ember-data 返回一个承诺,你如何使用隔离容器来测试它?

这是测试:

和实际路线的模型挂钩:

更新:

在从 kingpin2k 实施以下不同方法之后。这是结果的摘要。

第一种方法:效果很好......但没有承诺。

第二种方法:返回 promise 对象(似乎已解决),但将数组和正确的值分配给 _detail 属性。

我希望在模块 setup() 中处理商店创建。

和测试:

第三种方法:

在测试中,调用 route.model() 返回一个空对象 {} :

更新#2

还需要添加 asyncTest() 而不是 test() 并调用 start() 以防止测试运行程序挂起。

0 投票
1 回答
3274 浏览

jquery - testing an ember app - ember.js find() helper acceptable selectors

Trying to test-drive my first ember.js app. Using ember app kit.

Puzzled by how qunit works with selectors (I assumed that jquery selectors would work, and they do - for the most part...).

My handlebars has this code:

and I intend to test for existence of a link with an appropriate href and also click the link and verify the current url and route after click.

So, my tests are as follows:

note: I am using currentRouteName and currentURL helpers from this PR on EAK, and they do work as intended.

My test fails on the click(link) part, with Error: Element [object Object] not found..

If I try to pass the selector directly to click - like so - click("a[href='#/locations/new']") - I get an error Element a[href='#/locations/new'] not found.. Same result if I try to escape the special character # with a backslash or double backslash.

For the time being, I mitigated the issue by grabbing the div by class - like so:

And the tests pass.

Questions:

  1. how come I can't invoke "click()" on the same variable found by href?
  2. Am I testing with reasonable indifference to implementation? (well, the workaround of finding an element by the class doesn't fit that bill?)

Thanks in advance!

UPDATE

Per kingpin2k's comment, my test was passing due to the wrong assertion method I chose - ok(foo, 'bar') will pass if foo is an empty array (which find returns if there are no results. Ember API docs guided me to use findWithAssert, and it fails to find the link with such href.

Befuddlingly, using the [attribute='value'] jquery selector per jQuery docs in JS console works; and the implementation of find as well as findWithAssert in ember-testing seems to just pass down the selector to jQuery...

Why does it fail? I don't know. One would think as GLaDOS explained speedy thing goes in, speedy thing comes out - just passing the selector over to jQuery would give it back as jQuery would return it - but apparently not.

I'll stick to using the class selector then, although it does kind of dictate implementation.

0 投票
1 回答
478 浏览

ember.js - ember app kit:一些测试功能未定义

基于 ember 应用套件构建我的第一个 ember 应用。

我想在转换后测试当前路线 - 并在 ember 文档中找到我需要的东西 -currentRouteName辅助函数。currentURLcurrentPath

但是,如果我使用这些功能,我会得到一个"ReferencError: currentRouteName is not defined".

我偶然发现了这个拉取请求,我认为它具有相同事物的初始实现 - 但被关闭以支持将此功能添加到适当的 ember ......暂时,我从这个 PR 复制了代码,它确实得到了拿起并通过了我的测试。

问题:如何在测试中使用我的 ember.js 副本中定义的所有功能?visit这些路由辅助函数与和函数一起定义click,我的测试似乎没有问题。或者,我的测试是否从其他地方获取这些功能?

0 投票
0 回答
799 浏览

ember.js - Ember-Data - 递归关系

我正在使用带有 ember-data 的 ember-app-kit。我使用 ember-data 创建了以下两个模型。Node 具有递归关系,并且 Tag 具有对 Node 的引用。

每当我尝试将标签重新分配给不同的父级时,更改不会持续存在。

我发现了一个类似的问题,但不同之处在于 Tag 也与 Node.js 有关系。是否可以仅通过更新孩子来更新父子关系?

更新#1:

在控制台中检查 ember-data 的输出时,我注意到在保存时没有传达任何有关父子关系的信息。发送到后端的请求负载如下:

没有任何关于父/子关系的传输。但是,如果我将标签重新分配给不同的节点,后端会收到以下信息:

我尝试通过删除逆来简化我的节点模型。这允许我重新分配父母,但 ember-data 开始在请求中发送子关系作为更新关系的手段。

虽然这可以完成工作,但并不理想。因为可能有很多孩子,发送每个孩子的 id 会使请求负载膨胀。ember-data 是否无法使用其新的父关系密钥发送子节点的更新信息?此更改还导致 Qunit 中开始出现错误消息。

您在(DS.Model 的子类)上定义了“父”关系,但在(DS.Model 的子类)上发现了多个可能的逆向关系类型(DS.Model 的子类)

0 投票
1 回答
163 浏览

ember.js - 不根据路线渲染/删除侧边栏

我已经用 Ember 试验了几个小时但无法解决的问题。希望这只是我在阅读 Ember 文档时遇到的一个术语问题。

我有一个应用程序,在大多数情况下,它由一个侧边栏/顶栏(称为包装器)和一个页脚组成。

我的基本 application.hbs 看起来像这样(我使用 Ember App Kit 来提供结构):

如果这是我的应用程序的状态,它会工作得很好。页面内容在 {{outlet}} 中加载正常。

我的主要问题是如何以“Ember”的方式打破这个模板结构(最好不要使用所有 jQuery 并随意删除 DOM 元素)。

我有一些我不希望包装器和页脚显示的路由(它们是全页登录/忘记密码路由,以及一些最小界面/无干扰模式)。

我尝试通过制作默认模板(application.hbs)来尝试删除侧边栏和页脚:

ApplicationController在哪里showWrappers

尝试从 / 使用 {{link-to}} 转换到 /login 会返回错误:Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM大概是因为我正在删除 Ember 想要保留的东西(我正在使用 {{link-to}} 和 {{bind-attr} } 在边栏中,所以那里有绑定)。

知道我可以使用操作和 jQuery 来隐藏页面元素并将它们带回“无干扰”模式,但我更愿意学习如何构建模板并使用带有 renderTemplate 钩子的路由,可能使用 this.render ( ?) 吹走当前的 DOM 并从不同的基础(而不是 application.hbs)重建。

想法?非常乐意澄清。

0 投票
1 回答
1928 浏览

ember.js - Ember 数据初始化程序顺序

为什么在 ember 数据库中,在初始化期间,初始化程序 'injectStore' 在 'store' 初始化程序之前被调用(所以在 store 被 regitered 之前)?

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/initializers.js#L49

--

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/initializers.js#L97

不应该,先注册后注入?

0 投票
2 回答
434 浏览

javascript - Ember App Kit 与使用普通 Ember 相比的差异

我已经开始使用 ember app kit 并仔细阅读了它的指南。但是,我很难理解常规应用程序与 Ember App Kit 使用 ES6 模块构建各种位而不是将所有内容都填充到用作命名空间(例如应用程序)的全局变量中的方式之间的差异。

我发现这方面解释的不是很清楚:

  • Ember 如何在自动生成模型、视图、路由和控制器中应用它的魔力?
  • 它期望在哪里找到它们?
  • 我应该遵循哪些命名约定?
  • 如果我创建了一个模板、路由或控制器,但 Ember没有找到/检测到它,而只是在其位置生成了一个默认值,我如何找出它正在寻找的位置;或者在这种情况下调试?
  • 与使用 Ember App Kit 进行开发相比,标准 Ember 应用程序开发有何不同?

非常感谢提前!


编辑(20140506):

这些资源很好地解释了 ES6 模块和 EAK:

0 投票
1 回答
384 浏览

ember.js - Ember.js 按值跳转/选择列表/表格中的项目

目前边做边学 Ember.js。使用Ember 应用套件

我有基本的关系 - 一个模型“订单”,它有很多“项目”。我用以下 .hbs 显示订单和项目。

控制器只处理这两个动作。

和简单的模型。

订单控制器处理来自 order.hbs 的查询操作。

这一切都很好。

我想添加以下功能: order.hbs 中的输入字段,可以在其中输入 SKU 并打开(内联,就像使用双击一样)相应的项目进行编辑。如何以及在何处(在哪个控制器或视图中)执行此操作?

我目前对 ember.js 的理解表明它与 ArrayControllers 或视图有关。但我还没有发现任何类似的实现。

更新: 将 isEditing 从模型移到控制器,更适合它的位置。将示例从“帖子和评论”更改为“订单和项目”。

UPDATE2: 我添加了输入字段“搜索”,我可以在订单控制器中检索它的值。但是我不相信这是处理项目搜索的地方,是吗?

0 投票
1 回答
446 浏览

ember.js - 如何在 ember 应用程序工具包模板中访问嵌套目录中的组件

我在 /components/some-dir/some-component.js 中有一个组件,并试图在 .hbs 模板文件中使用它。

但车把会引发错误。ember 应用程序工具包文档说“/”被转换为“。” 并使用别名:

但是很难让它与组件类似地工作,所以不知道它是否适用?

0 投票
1 回答
932 浏览

javascript - Ember 应用程序工具包应用程序视图 didInsertElement 仅触发一次

嗨,我使用Ember 应用程序套件didInsertElement,每次更改路线时都需要触发(子视图 - 在插座中查看)。我需要像全局应用程序 DOM 就绪事件这样的东西。

我找到了 mavilein 的解决方案,但它不起作用。

这是我的app/views/application.js

当我运行应用程序时,它会触发didInsertElement,但是当我更改路由(单击链接)时,它不会触发应用程序视图didInsertElement事件。

我知道应用程序视图不会改变,但我需要每次更改子视图时触发的东西。还是我破坏了架构并以其他方式做事?

谢谢你的帮助。