我的模型定义为:
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string')
});
App.Question = DS.Model.extend({
name: DS.attr('string'),
answers: DS.hasMany('answer', {async: true})
});
Run Code Online (Sandbox Code Playgroud)
我有一个组件,允许删除和添加问题模型的答案.该组件带有"应用"和"取消"按钮,当用户单击"取消"时,我希望还原所有更改(添加/删除答案).目前回滚不起作用,我在使用rest适配器时尝试了model.reload(),但这对我来说也不起作用.知道如何在这种情况下进行回滚吗?
当使用其余的适配器时,我几乎陷入了这里指出的问题:使用HasMany的EmberJS取消(回滚)对象
谢谢,迪
更新:
由于我无法以预期的方式执行回滚,因此我执行了以下步骤:
1) get all the answers back from the server
2) remove answer association from the question
3) manually add answer association to the question model from data received from server
Run Code Online (Sandbox Code Playgroud)
这似乎运作良好但令人遗憾的是我得到了一个我无法摆脱的错误.
这是更新进展的jsbin:http://jsbin.com/uWUmUgE/2/
在这里,您可以创建新的答案,然后将其附加到问题并进行回滚.但是,如果您按照这些步骤操作,您将看到我面临的问题:
1) delete an answer
2) add an answer
3) perform rollback
4) add an answer
Run Code Online (Sandbox Code Playgroud)
它会抛出此错误:
错误:didSetProperty在状态root.deleted.uncommitted中尝试处理事件.用{name:position,oldValue:1,originalValue:1,value:2}调用.
我将非常感谢您提供的任何帮助. …
我试图在ember中构建一个模态框组件.模态框有两个标准按钮,"关闭"和"保存".我想将控制器操作传递给此组件,以便在单击"保存"按钮时,它会调用已传递的控制器操作.我将我的组件称为:
{{#affi-modal-box title="Test title" modalId="createNewAnalyticsRunModal" controllerBinding=controller}}some message{{/affi-modal-box}}
Run Code Online (Sandbox Code Playgroud)
和我的组件:
AS.AffiModalBoxComponent = Ember.Component.extend({
attributeBindings: ['modelId','test'],
//this is the function that gets called when save button is clicked
onSaveButtonClick : function(){
console.log(this.controllerFor('analysisTemplates'));//fails
console.log(this.get('controller'));//returns modal box component which I don't need
}
Run Code Online (Sandbox Code Playgroud)
});
我有什么想法可以将控制器对象传递给组件?
谢谢.
保存模型时是否有正确的方法来处理自定义错误?举个例子,假设我的模型只有两个属性"name"和"value".当我这样做时:
var myModel = this.get('store').createRecord('myModel', {"name": "someName", "value": "someValue"});
myModel.save().then(function() {
//if success
//server responded with {"myModel:{"id":1,"name":"someName","value":"someValue"}"}
},function() {
//if failure
//server responded with {"error":"some custom error message"}
//BUT HOW TO CATCH THIS AND POSSIBLY REMOVE THE MODEL FROM THE STORE
});
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是进行额外的ajax调用以检查名称是否唯一,然后执行保存.我只是想知道这里最好/最优雅的方法是什么.
谢谢,迪
编辑:我认为在groovy中为事物的服务器端提供更多上下文可能会有所帮助.所以这里是:
在我的控制器中我有:
def create() {
try {
newRow = someService.create(params)
render someService.list(newRow) as JSON//returns data in format needed by ember-data
}
catch (ValidationException ex) {
def errors = ["errors":[]]
ex.errors.allErrors.each{
if(it.arguments[0] == "fieldName" && it.code=="constrantViolated"){ …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何将模型绑定到文本字段,以便在更新文本字段中的值时,还更新基础模型(并将PUT请求发送到适当的API).从文档ember-data似乎能够做到这一点,但我无法将自定义文本字段连接到控制器/模型.
以下是我的模型的外观:
AS.Run = DS.Model.extend({
'analyticsPlan' : DS.attr('string'),
'commandScript' : DS.attr('string'),
'parameters' : DS.hasMany('parameter')
});
AS.Parameter = DS.Model.extend({
'name' : DS.attr('string'),
'type' : DS.attr('string'),
'description' : DS.attr('string'),
'value' : DS.attr('string'),
'default' : DS.attr('string'),
'analyticRun' : DS.belongsTo("run")
});
Run Code Online (Sandbox Code Playgroud)
这是我的模板:
<table style="width:100%;" class="affi-table">
<thead>
<tr class="ui-state-default">
<th style="width:120px;">Parameter Type</th>
<th style="width:120px;">Parameter Name</th>
<th>Description</th>
<th>Default value</th>
<th>Value</th>
</tr>
</thead>
<tbody>
{{#each parameter in parameters}}
<tr>
<td>{{parameter.type}}</td>
<td>{{parameter.name}}</td>
<td>{{parameter.description}}</td>
<td>{{parameter.default}}</td>
<td>{{view AS.AnalyticsParameterTextField valueBinding="parameter.value" placeholder="" nameBinding="parameter.name" style="width:200px;"}}</td>
</tr>
{{/each}}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
AnalyticsParameterTextField定义为:
AS.AnalyticsParameterTextField = Ember.TextField.extend({ …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的Grails 3项目,并且遇到了一些非常简单的事情.所以我希望我的数据源属性来自我在IntelliJ IDE中设置的VM选项.在Grails 2.x之前,我曾经做过类似的事情:
environments {
development{
//Database connection properties
def dbserver = System.properties.getProperty('dbserver')
def dbport = System.properties.getProperty('dbport')
............
dataSource {
url: "jdbc:sqlserver://${dbserver}:${dbport};databaseName=${dbname}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有application.yml,如何访问"System.properties"并将其嵌入yml?我已经读过,如果YML不支持,我们可以使用application.groovy,在这种情况下,这就是application.groovy的样子:
grails {
profile = 'web'
codegen {
defaultPackage = 'defPack'
}
}
info {
app {
name = '@info.app.name@'
version = '@info.app.version@'
grailsVersion = '@info.app.grailsVersion@'
}
}
spring {
groovy {
template['check-template-location'] = false
}
}
hibernate {
naming_strategy = 'org.hibernate.cfg.DefaultNamingStrategy'
cache {
queries = false
}
}
grails {
mime {
disable { …Run Code Online (Sandbox Code Playgroud) 让我们看一个简单的"坏"示例:假设我有2个集合'person'和'address'.并假设在'地址'中我想存储与地址相关联的人的'_id'.在"地址"集合中将这个"参考密钥"项存储为ObjectId vs string是否有任何好处?
我觉得将它们存放为字符串不应该受到伤害,但我没有在mongo工作很长时间,如果我遵循这种模式,我不知道它是否会伤害你的道路.
我在这里阅读帖子:将_Id存储为MongoDB中的对象或字符串? 并且它说ObjectId更快,如果你使用父集合中的ObjectId获取/更新(例如,使用person._id作为ObjectId获取/更新'person'集合),我认为它是真的,但我找不到任何暗示如果通过其他集合中的字符串id表示进行搜索(在我们的示例中,通过person._id作为字符串搜索地址集合)的情况,则可能是真的
非常感谢您的反馈.
我有一个关于部署槽的问题,因为我试图弄清楚我想要使用部署槽的方式是否可以接受。在我们的团队中,我们的大多数 Web 应用程序往往有 3 个环境:
目前,我们获得了一个单一的应用服务资源。由于我们想要维护为上述 3 个环境部署的应用程序代码的 3 个版本,我想知道是否可以利用 3 个单独的部署槽,或者创建 3 个单独的 Web 应用程序是否可行?
从文档中我知道部署槽用于快速测试,然后将其交换到生产中,但由于我们目前仅限于 Web 应用程序的单个实例,我正在考虑利用部署槽。
我想知道您对此的想法,以及我是否应该为此类场景使用新的应用程序服务或插槽。
我有一个场景,我有项目列表,每个项目都有一个创建按钮.当我点击创建时,我希望将一个组件附加到列表项.该组件使用模型数据作为参数,并从内部访问存储.要访问组件中的商店,我使用的是targetObject.store
如果我手动将其添加到模板,该组件效果很好:
{{#each}}
<div> blah blah {{my-component data=this.something action="doSomething"}} <button {{action 'add' this}}>Add</button></div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我可以使用标志显示/隐藏组件,并在单击"添加"按钮时切换它,但我宁愿在可能的情况下动态执行.
我确实试过这个但是对我不起作用,因为我无法访问商店:
actions: {
add: function(obj){
var view = Ember.View.create({
template: Ember.Handlebars.compile('{{my-component action="addQuestion"}}')
});
view.set('data', obj.get('something'));
Ember.run(function() {
//prolly can get parent view rather than document.body
view.appendTo(document.body);
});
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有简单的模型定义为:
App.Answer = DS.Model.extend({
name: DS.attr('string')
});
App.Question = DS.Model.extend({
questionName: DS.attr('string'),
answers: DS.hasMany('answer')
});
Run Code Online (Sandbox Code Playgroud)
我希望能够添加问题模型的答案,并且能够通过单击按钮删除所有hasMany关联.但是当我在循环中调用deleteRecord时,它会抛出js错误.替代方法是在删除每条记录之后引入一些延迟,我认为这不是正确的做事方式.
这里是用于演示问题的jsbin链接:http://jsbin.com/UleKodiC/2/ 单击"添加"按钮几次,然后单击"全部删除",它应该给你js错误,模型是未定义的.但是,如果单击"删除缓慢"(延迟删除),它会删除记录而不会出现错误.
谢谢,迪
我们怎样才能观察到Ember中数组的变化?我有使用模型中的原始对象数据的ember组件,但为了演示我在组件本身中使用数组属性的问题,如:
init:function(){
this._super();
var arr = Ember.A([
Ember.Object.create({"shelfNo": 1, "noOfItems": 2}),
Ember.Object.create({"shelfNo": 2, "noOfItems": 3}),
Ember.Object.create({"shelfNo": 3, "noOfItems": 2})]
);
this.set("someArray",arr);
//DOES NOT WORK
this.get('someArray').addArrayObserver(function () {
Ember.ObjectController.create({
arrayWillChange: function (observedObj, start, removeCount, addCount) {
console.log("in arrayWillChange");
},
arrayDidChange: function (array, start, removeCount, addCount) {
console.log("in arrayDidChange");
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
testObserver: function(){
//DOES NOT WORK
console.log("here");
}.observes('someArray@each')
Run Code Online (Sandbox Code Playgroud)
但两者都不适合我!
这是一个jsbin:http://jsbin.com/EkumOjA/1/
谢谢,迪
ember.js ×7
ember-data ×4
azure ×1
grails ×1
grails-2.0 ×1
grails-3.0 ×1
javascript ×1
mongodb ×1