我需要一种为添加到store的新记录生成id的方法。我正在使用本地存储适配器。并搜索某种方式并查找诸如本地存储适配器中的功能:
generateIdForRecord: function () {
return Math.random().toString(32).slice(2).substr(0, 5);
}
Run Code Online (Sandbox Code Playgroud)
但是此函数的问题是此函数在字符串中创建id,我需要在整数范围内自动递增id。例如1或2或2000,并且如果添加的新记录的ID是记录中ID的最大值,再加上1。我需要在客户端而不是服务器上执行此操作。
我在使用NDB的Google App Engine项目中使用EmberJs和Ember-Data.在数据库中,我有Host,Probe和Check实体.只要我的REST api按顺序排列,数据库模型并不重要,但为了清楚起见,这里是我的数据库类:
class Host(ndb.Model):
hostName = ndb.StringProperty()
hostKey = ndb.Key('Host', 'SomeHostId')
class Probe(ndb.Model):
checkName = ndb.StringProperty()
probeKey = ndb.Key('Host', 'SomeHostId', 'Probe', 'SomeProbeId')
class Check(ndb.Model):
checkName = ndb.StringProperty()
checkKey = ndb.Key('Host', 'SomeHostId', 'Probe', 'SomeProbeId', 'Check', 'SomeCheckId')
Run Code Online (Sandbox Code Playgroud)
我添加了密钥以显示每个主机上都运行了一些探针,每个探针都执行一些检查.
在我的App.Js中,我定义了以下模型:
App.Host = DS.Model.extend({
hostName: DS.attr('string')
probes: DS.hasMany('probe',{async:true})
});
App.Probe = DS.Model.extend({
host: DS.belongsTo('host'),
probeName: DS.attr('string')
checks: DS.hasMany('check',{async:true})
});
App.Check = DS.Model.extend({
probe: DS.belongsTo('probe'),
hostName: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
我已经定义了以下路由器:
App.Router.map(function() {
this.resource('hosts', function(){
this.resource('host', { path:':host_id'}, function(){
this.resource('probes', function(){
this.resource('probe', …Run Code Online (Sandbox Code Playgroud) 我需要创建一个 websocket 适配器来处理 Ember-data,并且在 stackoverflow 中遇到了这个例子。
但是,由于我正在阅读有关使用 Promise 的 Ember 的所有这些内容,我想知道示例中显示的代码是否适用于最新版本的 Ember 和 Ember-data。适配器中的所有方法(例如,find、findAll、createRecord 等)都必须返回承诺吗?
从概念上讲,我想我明白 Promise 的目的是做什么,但我真的不知道如何使用它。有懂的人可以解释一下吗?
我有一个资源,我从服务器/项目列出我的所有项目.您可以访问去/ projects /:slug的特定项目.
当我访问项目资源时,我在Ember Inspector中看到了这些数据:
/项目
id | Slug | Title |
-------------------------------------------------
1 | first-project | First project |
-------------------------------------------------
2 | second-project | Second project |
-------------------------------------------------
3 | third-project | Third project |
Run Code Online (Sandbox Code Playgroud)
当我从项目列表中访问项目时,我得到相同的数据,没有新的ajax请求,一切正常./项目/第一项目
当我刷新/ projects/first-project页面时出现问题.Ember发出一个从服务器获取数据的ajax请求,但它也插入了一个空行,其中slug作为数据的id.
id | Slug | Title |
-------------------------------------------------------------
first-project | | |
-------------------------------------------------------------
1 | first-project | First project |
Run Code Online (Sandbox Code Playgroud)
现在访问项目列表它显示了一个项目列表,但在列表的顶部是这个空行.为什么要将这个slug行插入我的数据?也许我的逻辑错了.
<li>
<a id="ember451" class="ember-view" href="/projects/undefined">
<script id="metamorph-13-start" type="text/x-placeholder"></script>
<script id="metamorph-13-end" type="text/x-placeholder"></script>
</a>
</li>
Run Code Online (Sandbox Code Playgroud)
我的项目代码:
App.Router.map(function() {
this.resource('project', { …Run Code Online (Sandbox Code Playgroud) 我正在使用Ember v1.0.0和Ember-Data v1.0.0-beta.3构建一个简单的Ember应用程序.我有一个名为'Categoria'的模型
categoria.coffee:
App.Categoria = DS.Model.extend
nombre: DS.attr 'string'
simplified: DS.attr 'boolean'
candidatos: DS.hasMany 'candidato'
Run Code Online (Sandbox Code Playgroud)
当我尝试通过它的id找到'Categoria'时,我总是收到错误消息: 断言失败:没有找到'categorium'的模型
categoria_route.coffee:
App.CategoriaRoute = Em.Route.extend(
model: (params)->
@store.find('categoria', params.categoria_id)
)
App.CategoriaIndexRoute = Em.Route.extend(
model: ->
categoria = @modelFor('categoria')
categoria.reload() if categoria.get('simplified')
categoria
)
Run Code Online (Sandbox Code Playgroud)
由于西班牙语命名的模型,我已经指定了变形规则.
store.coffee:
Ember.Inflector.inflector.irregular('categoria', 'categorias')
Ember.Inflector.inflector.rules.irregularInverse['categorias'] = 'categoria'
App.ApplicationAdapter = DS.ActiveModelAdapter()
App.ApplicationSerializer = DS.ActiveModelSerializer.extend()
Run Code Online (Sandbox Code Playgroud)
我想知道商店的find方法是否使用了一组不同的变形规则?还是有其他地方我应该宣布这个模型的变形规则?
值得一提的是,对该模型的服务器请求是正确的(到正确的URL)并且它们的响应很好.
我试图使用Ember Guides#Method Find(http://emberjs.com/api/data/classes/DS.Store.html#method_find)中store.find提到的方法使用不同的语法,但错误是相同的.
考虑这个模型:
Grandparent
parents: DS.hasMany('parent')
Parent:
grandparent: DS.belongsTo('grandparent')
children: DS.hasMany('child')
Child:
parent: DS.belongsTo('parent')
Run Code Online (Sandbox Code Playgroud)
我想一个计算的属性添加children到Grandparent模型,其中我希望集合Child模型(Grandparent.children =合并的每个Grandparent.parents.children).
怎么做?
对于此示例数据:
Grandparent { id: 0, parents: [0, 1] }
Parent { id: 0, grandparent: 0, children: [0] }
Parent { id: 1, grandparent: 0, children: [1,2] }
Child { id: 0, parent: 0 }
Child { id: 1, parent: 1 }
Child { id: 2, parent: 1 }
Run Code Online (Sandbox Code Playgroud)
我想要Grandparent.get('children')带有ids [0,1,2]的孩子.
编辑:
App.Grandparent.reopen({
grandchildren: function(){
var result = …Run Code Online (Sandbox Code Playgroud) 在ember数据v1.0.0-beta.16.1中有许多钩子.
它只是很难理解这些钩子的目的.对于一个新手来说,似乎所有这些都是为了做同样的事情.
我希望了解的应用,
A.规范化和规范化哈希
B.序列化
C. normalizePayload
我正在使用ember-cli来构建我的应用程序,它为我提供了一个很好的app.js文件,我可以在静态资产服务器上提供该文件。在部署时允许单独配置的最惯用的方法是什么?
例如,我可能会告诉我的app.js文件的使用者包含一个config.[js|json]将被加载的额外文件,并且该文件中的值将进入ENV对象......以便我可以将应用程序指向不同的 REST 端点,例如(QA、沙盒、预发布等)而无需重新编译。
我想一定有办法,我只是没有看到。我知道有config/environment.js文件,但它被编译到dist文件夹中。我正在寻找位于打包 JS 旁边的东西。我当然可以一起破解一些东西,所以我不是在寻找黑客。一个ember-cli-addon,也许?我认为必须有一种“余烬方式”来做到这一点。
我只是没有找到它:)
configuration ember.js ember-data ember-cli ember-cli-addons
我在将来自 Grape(用 Grape 实体序列化)的 Json 有效负载与 Ember 反射模型连接时遇到问题。模型看起来像这样:
Category = DS.Model.extend {
name: DS.attr 'string',
children: DS.hasMany 'category', inverse: 'parent',
parent: DS.belongsTo 'category', inverse 'children'
}
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,我正在尝试对类别-子类别关系进行建模。来自端点的示例 json 响应是:
{
"category": {
"id": 1,
"name": "Sport",
"child_ids": [
5,
6,
8,
7
]
},
"children": [
{
"id": 5,
"name": "Basketball",
"parent_id": 1
},
{
"id": 6,
"name": "Football",
"parent_id": 1
},
{
"id": 8,
"name": "Running",
"parent_id": 1
},
{
"id": 7,
"name": "Volleyball",
"parent_id": 1
}
]
} …Run Code Online (Sandbox Code Playgroud) 我的服务器有一个 json 数据:
{
"post": {
"id": 1,
"title": "Progressive Enhancement is Dead",
"comments": ["1", "2"],
"links": {
"user": "/people/tomdale"
}
},
"meta": {
"total": 100
}
}
Run Code Online (Sandbox Code Playgroud)
看起来完全像文档(https://guides.emberjs.com/v2.5.0/models/handling-metadata/)我尝试获取元对象但没有成功
export default Ember.Route.extend({
model() {
var data = this.store.findAll('post');
data.then((result) => {
let meta = result.get('meta');
console.log(meta); //this return me undefined
})
return data;
}
});
Run Code Online (Sandbox Code Playgroud) ember-data ×10
ember.js ×10
ember-cli ×2
javascript ×2
ajax ×1
collections ×1
grape-entity ×1
json ×1
json-api ×1
ruby-grape ×1