小编And*_*aus的帖子

与Ember CLI Mirage的关系

我是Ember的新手,我正在尝试创建一个简单的应用程序,我有2个模型,山脉和山脉.范围有许多山脉,而山脉属于一个范围.我想在他们之间建立一种关系.我在网上搜索过,但我发现了不同的解释,我仍然在努力解决这个问题.

我的模特是:

mountain.js

import DS from 'ember-data';
export default DS.Model.extend({
    name: DS.attr('string'),
    altitude: DS.attr('number'),
    range: DS.belongsTo('range', {async: true})
});
Run Code Online (Sandbox Code Playgroud)

range.js

import DS from 'ember-data';
export default DS.Model.extend({
    name: DS.attr('string'),
    length: DS.attr('number'),
    mountains: DS.hasMany('mountain', {async: true})
});
Run Code Online (Sandbox Code Playgroud)

我的mirage/scenario/default.js文件看起来像这样:

export default function(server) 
{
    var himalaya = server.create('range', {id: 1, name:'Himalaya', length:'16598' });
    var karakorum = server.create('range', {id: 2, name:'Karakorum', length:'34801' });

    var everest = server.create('mountain', {id:1, name: 'Everest', altitude: '8871', range_id:1 });
    var K2 = server.create('mountain', {id:2, name: 'K2', altitude: …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-cli ember-cli-mirage

7
推荐指数
1
解决办法
2012
查看次数

Ember.js:如何集成测试与ember-data模型交互的组件

我正在构建一个相对直接的comment-list组件.我想传递可评论的模型(比如说a Post)并让组件负责创建,编辑和删除注释.现在我传递了各种各样的动作,而且非常脆弱.

如何在组件集成测试中创建Ember Data模型的真实实例?

我的直接想法是导入模型然后.create({})它,但错误use this.store.createRecord() instead

/* jshint expr:true */
import { assert } from 'chai';
import { describeComponent, it } from 'ember-mocha';
import hbs from 'htmlbars-inline-precompile';
import Post from 'ownersup-client/post/model';

describeComponent( 'comment-list', 'Integration: CommentListComponent', {
    integration: true
  },
  function() {
    it('renders all of the comments', function() {
      const model = Post.create({ title: 'title' });
      model.get('comments').createRecord({ body: 'One Comment' })

      this.render(hbs`{{comment-list model=model}}`);

      assert.lengthOf(this.$('.comment-list-item'), 1);
    });
  }
);
Run Code Online (Sandbox Code Playgroud)

有人有什么想法?

ember.js ember-data ember-cli

7
推荐指数
3
解决办法
1906
查看次数

使方法在块中可用而不更改其上下文?

我想创建一个执行以下操作的类:

  • 它的实例接受一个块。
  • 在实例初始化期间,它执行某些操作,然后调用块,然后执行更多操作。
  • 在块内,该类的另一个方法应该可用。

这是我希望它的工作方式:

Foo.new do
  puts "Hell, I can get you a toe by 3 o'clock this afternoon..."
  bar
  puts "...with nail polish."
end
Run Code Online (Sandbox Code Playgroud)

我已经通过以下课程成功实现了这一目标:

class Foo

  def initialize(&block)

    puts "This represents a beginning action"

    instance_eval &block

    puts "This symbolizes an ending action"

  end

  def bar
    puts "I should be available within the block."
  end

end
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我使用了这个instance_eval技巧。bar它允许在块内使用。

它工作正常,但这里的问题是instance_eval使当前的本地上下文不可用。如果我在另一个类中使用它,我将无法访问该类的方法。例如:

class Baz
  def initialize
    Foo.new do
      bar  # -> Works
      quux # -> Fails …
Run Code Online (Sandbox Code Playgroud)

ruby

6
推荐指数
1
解决办法
1092
查看次数

在单元测试中使用初始化程序?

我有一个stdlib初始化器.在该初始化程序中,我重新打开一些内置的Ember类并添加一些自定义方法.例如,我添加reverseEachEmber.EnumerableArray.

它们在应用程序中运行良好,但在测试中我收到"reverseEach:undefined不是函数".

我如何表明测试应该使用初始化程序?

我试过了needs: [..., 'initializer:stdlib'].它没有偶然发现,但我仍然收到"未定义"的错误.

这是一个示例测试:

`import { test, moduleForModel } from 'ember-qunit'`

moduleForModel 'foo', 'foo',
  needs: [
    'model:bar'
    'initializer:stdlib'
  ]

test 'deleteLastNItems', ->
  model = @subject()
  model.set '', ['foo', 'bar', 'baz', 'quux']
  model.deleteLastNItems 2 # This should not die with "reverseEach: undefined is not a function"
  deepEquals model.get('someProperty'), ['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

unit-testing ember.js ember-cli

6
推荐指数
1
解决办法
870
查看次数

为什么我的更改在取消 git commit 后消失了,我该如何恢复它们?

这是我所做的:

  1. 编码了 8 小时的更改。
  2. git status 显示我的所有更改。
  3. git add -A
  4. git commit -m "Foo". 预提交的 git 钩子用husky和触发lint-staged
  5. 我记得有一个我未能修复的 TypeScript 输入错误,所以我按 Ctrl+C 取消。
  6. 心不在焉,我又跑了git commit -m "Foo"一次,立即取消了。
  7. 变化消失了!文件被还原,git status是干净的,git log并且git reflog不显示新的提交。

为什么我的更改被还原?我如何恢复它们?

第1步 第2步

git husky lint-staged git-husky

6
推荐指数
2
解决办法
2036
查看次数

.scss.erb扩展语法突出显示aptana/eclipse中的scss

如果我在scss文件中有一些eRuby,我需要制作扩展名*.scss.erb.但是,这样做会导致*.erb而不是*.scss的sytax突出显示.有没有办法让eclipse更明智地确定语法突出显示,或者至少允许像notepad ++那样手动语法分配?

到目前为止,我发现的唯一解决方法是重命名文件*.scss,打开它,然后将其重命名为*.erb,以便稍后正确处理.

eclipse syntax-highlighting erb sass

5
推荐指数
1
解决办法
784
查看次数

寻找完美的下拉菜单:拉伸到全宽,相等宽度的项目,纯CSS.请帮助解决一个小问题

我正在尝试实现具有以下功能的菜单:

  • 水平;
  • 等宽菜单项;
  • 菜单项遍布整个页面宽度(不仅仅是左侧的人群);
  • 动态(css规则不应该依赖于预定义的项目数);
  • 垂直对齐项下拉第二级;
  • 纯CSS(没有JS!).

这似乎描述了我看到的完美菜单.

我几乎成功地使用了漂亮的display: table-cell;技术(为简单起见省略了标签):

<ul>
    <li>Menu item</li>
    <li>
        Expandable ?
        <ul>
            <li>Menu</li>
            <li>Menu item</li>
            <li>Menu item long</li>
        </ul>
    </li>
    <li>Menu item</li>
    <li>Menu item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
ul {
    display: table;
    table-layout: fixed;
    width: 100%;
}

li {
    display: table-cell;
    text-align: center;    
}

li:nth-child(even){
    background-color: lightblue;    
}

li:nth-child(odd){
    background-color: lightskyblue;    
}

li ul { display: none; }

li:hover ul {
    display: block;
    position: absolute;
}

li:hover ul li {
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是子菜单项显示整页宽度,部分显示在浏览器窗口之外,强制显示水平滚动条: …

html css html5 css3 drop-down-menu

5
推荐指数
1
解决办法
5310
查看次数

将一个变量从mixin声明中传递到附加的内容块中?

在Ruby中,您可以轻松地将方法内部的变量传递到附加的代码块中:

def mymethod
  (1..10).each { |e| yield(e * 10) } # Passes a number to associated block
end

mymethod { |i| puts "Here comes #{i}" } # Outputs the number received from the method
Run Code Online (Sandbox Code Playgroud)

我想在SASS mixin中做同样的事情:

=my-mixin
  @for $i from 1 to 8
    .grid-#{$i}
      @content

+my-mixin
  color: nth("red green blue orange yellow brown black purple", $i)
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为$ i在mixin声明中声明,并且在使用mixin的外部无法看到.:(

那么......我如何利用mixin声明中声明的变量?

当我使用网格框架和媒体查询时,我非常需要这个功能.目前我必须在每次需要时复制mixin声明中的内容,违反DRY规则.

UPD 2013-01-24

这是一个真实的例子.

我有一个循环通过断点的mixin并为每个断点应用提供的代码一次:

=apply-to-each-bp
  @each $bp in $bp-list
    +at-breakpoint($bp) // This is from Susy gem
      @content
Run Code Online (Sandbox Code Playgroud)

当我使用这个mixin时,我必须在@content中使用这个$ bp值.它可能是这样的:

// …
Run Code Online (Sandbox Code Playgroud)

sass susy-compass compass-sass

5
推荐指数
1
解决办法
1478
查看次数

利用任何方法链的功能

我喜欢Ruby的.tap方法是如何工作的.它可以让您轻松进入任何方法链而不会破坏链条.我让你操作一个对象然后返回对象,以便方法链可以正常继续.例如,如果你有foo = "foobar".upcase.reverse,你可以这样做:

"foo = foobar".upcase.tap{|s| print s}.reverse
Run Code Online (Sandbox Code Playgroud)

它将打印upcased(但不反转)字符串,并像原始行一样继续进行反转和赋值.

我想在JS中有一个类似的功能,它可以用于一个目的:将对象记录到控制台.

我试过这个:

Object.prototype.foo = function() {
  console.log(this);
  return this;
};
Run Code Online (Sandbox Code Playgroud)

通常,它可以工作(虽然它输出数字的数字对象而不是数字值).

但是当我使用一些jQuery时,它会破坏jQuery并停止页面上所有进一步的代码执行.

错误是这样的:

  • 未捕获的TypeError:对象foo没有方法'push'
  • 未捕获TypeError:Object function(){window.runnerWindow.proxyConsole.log("foo"); 没有方法'exec'

这是一个测试用例:http://jsbin.com/oFUvehAR/2/edit(取消注释第一行以查看它是否中断).

所以我想混淆对象的原型是不安全的.

然后,做我想要的正确方法是什么?将当前对象记录到控制台并返回对象以便链可以继续的函数.对于基元,它应该记录它们的值而不仅仅是对象.

javascript jquery

5
推荐指数
1
解决办法
775
查看次数

如何保存Ember Data记录而不提交到后端?

因此,Ember数据模型具有在不将其提交到后端deleteRecord()destroyRecord()情况下执行的功能。

我该怎么做save(),而不将其提交到后台?

我需要它的原因是,我正在使用自定义服务在一个请求中批量保存多个不同类型(模型)的记录。我已成功发送请求,并且记录保留在后端。

但是由于请求没有通过Ember Data管道,因此除非我手动处理,否则服务器的响应将被丢弃。

基本上,我在服务中有此功能:

// Accepts an array of records of mixed types,
// both existing and new
batchSave (records) {             

  this
    .customAjax(records)          // The records are persisted
    .then(payload => {            // Response from the backend with updated records
      store.pushPayload(payload); // Now all records have been updated with their current state

      // Now all the records are in their current state.
      // But they are still dirty!
      // How do I mark …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

5
推荐指数
1
解决办法
2506
查看次数