我是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) 我正在构建一个相对直接的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)
有人有什么想法?
我想创建一个执行以下操作的类:
这是我希望它的工作方式:
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) 我有一个stdlib初始化器.在该初始化程序中,我重新打开一些内置的Ember类并添加一些自定义方法.例如,我添加reverseEach到Ember.Enumerable和Array.
它们在应用程序中运行良好,但在测试中我收到"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) 这是我所做的:
git status 显示我的所有更改。git add -Agit commit -m "Foo". 预提交的 git 钩子用husky和触发lint-staged。git commit -m "Foo"一次,立即取消了。git status是干净的,git log并且git reflog不显示新的提交。为什么我的更改被还原?我如何恢复它们?
如果我在scss文件中有一些eRuby,我需要制作扩展名*.scss.erb.但是,这样做会导致*.erb而不是*.scss的sytax突出显示.有没有办法让eclipse更明智地确定语法突出显示,或者至少允许像notepad ++那样手动语法分配?
到目前为止,我发现的唯一解决方法是重命名文件*.scss,打开它,然后将其重命名为*.erb,以便稍后正确处理.
我正在尝试实现具有以下功能的菜单:
这似乎描述了我看到的完美菜单.
我几乎成功地使用了漂亮的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)
唯一的问题是子菜单项显示整页宽度,部分显示在浏览器窗口之外,强制显示水平滚动条: …
在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) 我喜欢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并停止页面上所有进一步的代码执行.
错误是这样的:
这是一个测试用例:http://jsbin.com/oFUvehAR/2/edit(取消注释第一行以查看它是否中断).
所以我想混淆对象的原型是不安全的.
然后,做我想要的正确方法是什么?将当前对象记录到控制台并返回对象以便链可以继续的函数.对于基元,它应该记录它们的值而不仅仅是对象.
因此,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 ×4
ember-cli ×3
ember-data ×2
sass ×2
compass-sass ×1
css ×1
css3 ×1
eclipse ×1
erb ×1
git ×1
git-husky ×1
html ×1
html5 ×1
husky ×1
javascript ×1
jquery ×1
lint-staged ×1
ruby ×1
susy-compass ×1
unit-testing ×1