标签: ember-cli

如何从Ember CLI中的Route访问Ember Model

也许使用常规的Ember应用程序,将所有代码放在app.js中对我来说会更容易.但由于我使用的是Ember CLI,因此无法在我的路线中访问我的模型.我还在尝试学习如何使用Ember CLI,所以请帮帮我.

因为我只想激活AJAX调用并在我的UI上渲染数据,所以我下载并将Ember Model库添加到我的项目中.我认为不需要使用Ember Data.这是我所指的Ember Model文档:https://github.com/ebryn/ember-model#example-usage.话虽如此,这是Ember CLI提出的我的目录结构:

|-app    
  |-controllers
  | |-customers.js
  |-models    
  | |-customers.js
  |-routes    
  | |-customers.js
  |-templates    
  | |-customers.hbs
  |-app.js
  |-index.html
  |-main.js
  |-router.js
Run Code Online (Sandbox Code Playgroud)

这是我只关注问题的实际项目结构的更简单的表示.正如Ember Model文档中提出的,我将以下代码添加到我的Customers模型(model\customers.js)中:

export default Ember.Model.extend({
    nameid: attr(),
    firstname: attr(),
    middlename: attr(),
    lastname: attr(),        
    prefixname: attr(),
    suffixname: attr()
});

this.url = "http://restapi/api/customers";
this.adapter = Ember.RESTAdapter.create();
Run Code Online (Sandbox Code Playgroud)

请注意,我必须执行"export default"而不是"App.Customers = Ember.Model.extend ...".这是Ember CLI惯例.因此,当我尝试访问我在Customers Route中创建的模型时,我收到错误"加载路径时出错:ReferenceError:App未定义"..

客户路线代码:

export default Ember.Route.extend({
    model: function () {
        App.Customers.find();
    },

    actions: {
        addnew: function(){
            //logic of saving edited customer
            alert('customer …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-model ember-cli

8
推荐指数
1
解决办法
6563
查看次数

如何配置Ember CLI以使用uncss

我很难配置Ember CLI来使用uncss.设置:

> ember new foobar
> cd foobar
> bower install --save-dev bootstrap
> ember generate route index
Run Code Online (Sandbox Code Playgroud)

应用程序/模板/ index.hbs

<h1>Hello World!</h1>
Run Code Online (Sandbox Code Playgroud)

Brocfile.js

/* global require, module */

var EmberApp = require('ember-cli/lib/broccoli/ember-app');

var app = new EmberApp();

app.import('vendor/bootstrap/dist/css/bootstrap.css');

module.exports = app.toTree();
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使用https://github.com/sindresorhus/broccoli-uncsshttp://iamstef.net/ember-cli/的资产部分说它很容易,但它没有描述如何实际做到这一点.

ember.js ember-cli broccolijs

8
推荐指数
1
解决办法
561
查看次数

在子文件夹中组织Ember.js模型?

我有多个表示用户数据的模型(配置文件,设置等).目前这些都存储在models文件夹中,就像这样;

models
  -> user.js
  -> profile.js
  -> settings.js
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的文件夹结构;

models
  -> user.js
  -> user (folder)
    -> profile.js
    -> settings.js
Run Code Online (Sandbox Code Playgroud)

用户模型(user.js)像这样引用配置文件模型(profile.js);

import DS from "ember-data"; 
export default DS.Model.extend({
   NSP: DS.attr('string'),
   Status: DS.attr('string'),
   Profile: DS.belongsTo('profile', {embedded: 'always'})
});
Run Code Online (Sandbox Code Playgroud)

我试图DS.belongsTo('profile', {embedded: 'always'})用以下内容替换:

  • DS.belongsTo('user.profile', {embedded: 'always'})
  • DS.belongsTo('user/profile', {embedded: 'always'})
  • DS.belongsTo('user-profile', {embedded: 'always'})

但这不起作用.

我在这里错过了什么吗?

ember.js ember-cli

8
推荐指数
1
解决办法
1620
查看次数

Ember CLI /浏览器刷新/生产/ 404

我使用Ember CLI 0.1.15和emberjs开发了我的webapp.1.8.1

我用这个命令构建了应用程序:ember build --environment production,然后我从我项目的dist文件夹下生成的文件中生成了一个WAR,然后我将WAR放在tomcat的webapps文件夹中.

所以,当我打开应用程序时:http:// mytomcat/myapp / ...它很好,我看到了我的登录屏幕,我登录了,并在我的应用程序中导航,一切都很好.我也可以做后退/前进按钮,并且ember可以很好地处理过渡.

但是当我点击浏览器上的刷新按钮时 - 浏览器的地址栏显示了http:// mytomcat/myapp/inventory /那一刻 - 我从tomcat得到了404回复.

然后我弄清楚它为什么会发生:刷新按钮向tomcat发送一个请求路径/ myapp/myinventory/...当然,服务器上不存在路径/ myinventory.我们在浏览器上看到的所有路由 - 除了基本URL,http:// mytomcat/myapp / - 都是在客户端生成的.

所以,我的问题是:处理这种情况的正确方法(在余烬中)是什么?我需要刷新按钮才能正常工作.任何方式让ember拦截刷新按钮点击事件?

我想这个问题与此有关:https://github.com/stefanpenner/ember-app-kit/issues/486,但它没有我需要的答案.

提前谢谢,拉卡

---更新---

可能相关:http://eviltrout.com/2014/04/10/the-refresh-test.html

ember.js ember-cli

8
推荐指数
1
解决办法
1822
查看次数

创建一个在Ember-CLI中迭代一定次数的for循环

我处于这样一种情况,我希望能够有一个组件或帮助器,允许我迭代多次并每次输出封闭的块.像这样的东西:

{{#incremented-for 2}}
    block to output
{{/incremented-for}}
Run Code Online (Sandbox Code Playgroud)

我尝试将其设置为组件,但无法找到使其工作的方法.我还尝试将其设置为帮助程序,并且能够找到一些似乎应该工作的代码:

export function incrementedFor(n, block) {
    var accum = '';
    for(var i = 0; i < n; ++i)
        accum += block.fn(i);
    return accum;
}

export default Ember.Handlebars.makeBoundHelper(incrementedFor);
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,上面写着:

Uncaught Error: Assertion Failed: registerBoundHelper-generated helpers do not support use with Handlebars blocks.
Run Code Online (Sandbox Code Playgroud)

有没有人想过为什么这种方法可能不起作用,或者更好的是,在Ember-cli中更好的方法呢?

ember.js ember-cli

8
推荐指数
2
解决办法
8280
查看次数

ember serve和ember server之间有什么区别吗?

ember-cli文档中, ember server命令用于启动应用程序.但是我们可以用ember serve命令做同样的事情.我假设server只是包装serve.任何人都可以澄清更多吗?

ember-cli

8
推荐指数
1
解决办法
1431
查看次数

Ember CLI ES6模块:导入app root的路径

在Ember CLI中使用它时,我发现ES6模块中的导入路径非常混乱.例如,如果我想在我的应用程序中深入导入模型,我最终会做这样的事情:

import User from '../../../../../models/user';
Run Code Online (Sandbox Code Playgroud)

这是一次反复试验,因为很难直观地看到我正在使用它的文件夹树的深度.更糟糕的是,如果我重构我的文件,一切都会中断.

所以或者,我可以使用这样的绝对路径:

import User from 'app-name/models/user';
Run Code Online (Sandbox Code Playgroud)

我不想将应用名称硬编码到路径中,因为它可以改变.

是否有指定应用程序根目录的简写?

./不起作用,因为./暗示当前路径.

import User from './models/user';
Run Code Online (Sandbox Code Playgroud)

module ember.js ecmascript-6 ember-cli

8
推荐指数
1
解决办法
1304
查看次数

如何为Ember.js适配器/序列化器创建单元测试?

我正在构建一个Ember CLI应用程序(v0.2.3),我为我的应用程序中的适配器和序列化器生成了一些单元测试.生成的代码如下所示:

// app/serializers/my-model-test.js

// Replace this with your real tests.
test('it serializes records', function (assert) {
  var record = this.subject();

  var serializedRecord = record.serialize();
  assert.ok(serializedRecord);
});
Run Code Online (Sandbox Code Playgroud)

// app/adapter/application-test.js

// Replace this with your real tests.
test('it exists', function (assert) {
  var adapter = this.subject();
  assert.ok(adapter);
});
Run Code Online (Sandbox Code Playgroud)

我在这些测试中放了什么?我为我的模型和组件构建了验收测试和单元测试,但不确定在这些单元测试中需要进行哪些测试.无法找到有关构建这些单元测试的文档,也无法在GH上找到构建这些测试的任何示例应用程序.

unit-testing ember.js ember-cli

8
推荐指数
2
解决办法
4202
查看次数

具有多个代理的Ember CLI

问题:

我有一个Ember CLI应用程序,它将使用多个API,我需要在开发模式下代理它们.

背景:

我有一个遗留的api,它暴露/api了我在本地开发机器上运行的服务localhost:3000

我有一个新的api暴露了服务/myapp/api/v1.这些服务最近从遗留应用程序中提取,并包含ember应用程序使用的大多数应用程序服务.

ember应用程序使用baseURL /myapp,因为它被部署到子目录.

我使用生成了两个http-proxys ember generate http-proxy.他们位于/server/proxies/api.jsserver/proxies/myapp/api/v1.js

api.js

var proxyPath = '/api';
module.exports = function(app) {
  var proxy = require('http-proxy').createProxyServer({});
  proxy.on('error', function(err, req) {
    console.error(err, req.url);
  });
  app.use(proxyPath, function(req, res, next){
    // include root path in proxied request
    req.url = proxyPath + '/' + req.url;
    proxy.web(req, res, { target: 'http://localhost:3000' });
  });
};
Run Code Online (Sandbox Code Playgroud)

的myapp/API/v1.js

var proxyPath = 'myapp/api/v1';
module.exports = function(app) {
  var proxy = …
Run Code Online (Sandbox Code Playgroud)

proxy ember-cli

8
推荐指数
1
解决办法
812
查看次数

在构建期间是否可以将环境变量传递给Ember cli sass?

我正在使用ember-cli-sass

我想根据env变量定义一些sass变量.

我的theme1.scss文件

@if 'theme1' == process.env.THEME {
  $color-secondary: #eee;
  $color-primary: #ff0;
}
Run Code Online (Sandbox Code Playgroud)

我如何将我的env发送到西兰花构建过程

以及如何在sass脚本中访问env变量?

sass ember.js ember-cli broccolijs

8
推荐指数
1
解决办法
955
查看次数