首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在成员中选择字符作为字段分隔符,以避免与库内部和车把模板发生冲突。

在成员中选择字符作为字段分隔符,以避免与库内部和车把模板发生冲突。
EN

Stack Overflow用户
提问于 2014-02-13 09:34:17
回答 1查看 336关注 0票数 0

我在这里提出这个问题,以供其他人参考。我有点希望能得到这个答案,但我还是想描述一下我的经历。

首先,让我简短地解释一下我的问题:我正在将应用程序从ember-data 0.0.14移植到ember-data 1.0.0-beta6。某些人,在某个时候,决定放弃对成员数据中的嵌入式记录的支持是一个好主意。他们已经实现了许多时髦的钩子,以按摩json,但经过大量的尝试,所有可能的修补(extractSingleextractArraynormalizeHash,任何你能想到的),我的结论是,ember将永远不会与结构化文档工作。即使得到正确的对象结构,子属性也不能被访问,因为成员没有看到子模型,可能是因为它们不受支持吗?管他呢。

我说的不是json响应中嵌入的相关文档,而是一个复杂的结构化文档,如下所示:

代码语言:javascript
复制
{
   "_id": "prod1",
   "_rev": "20-bcea8facfe04b3a2e3924e810dfc5ecd",
   "features": {
       "contact-numbers": 1,
       "agents": 2,
       "outgoing-call-minutes": 50,
       "basic-crm": true,
       "google-apps-integration": true,
       "call-recording": false,
       "unlimited-agents": false
   },
   "publish": true,
   "price": {
       "product": 10,
       "service": 0,
       "line": 10,
       "agent": 0,
       "minute": 0,
       "minute-806": 0.18
   },
   "product_description": "Entrepreneur",
   "active": true,
   "payment_periodicity": "MONTHLY",
   "type": "product",
   "product_name": "Entrepreneur"
}

这是一个单一的文件,但对于成员-数据,这是一个禁止。在旧的成员数据中,我可以在模板中引用price.product,或者对其执行.get('price.product'),或者观察它,这样就可以了。不再是了。(如果可以同时拉三根线来支撑,我不在乎。维护人员都是不关心,所以我放弃了)

我仍然需要将我的应用程序移植到我的最后一个成员数据,所以我想出了一个解决方案:在服务器中预扁平化文档,并在POSTing / PUTting时将其去扁平。为了自动完成这一任务(并避免使用另一种手工编码的映射),我需要一个字符作为分隔符,这个字符在属性名中永远不会出现。例如,使用.

代码语言:javascript
复制
{   '_id': 'prod1',
    '_rev': '20-bcea8facfe04b3a2e3924e810dfc5ecd',
    'active': True,
    'features.agents': 2,
    'features.basic-crm': True,
    'features.call-recording': False,
    'features.contact-numbers': 1,
    'features.google-apps-integration': True,
    'features.outgoing-call-minutes': 50,
    'features.unlimited-agents': False,
    'payment_periodicity': 'MONTHLY',
    'price.agent': 0,
    'price.line': 10,
    'price.minute': 0,
    'price.minute-806': 0.18,
    'price.product': 10,
    'price.service': 0,
    'product_description': 'Entrepreneur',
    'product_name': 'Entrepreneur',
    'publish': True,
    'type': 'product'}

这是如此简单,即使是余烬数据也能理解。嗯,别这么快!这个点对成员数据来说意味着什么,所以它不能用作分隔符。我试过:

  • X:工作,但我不能使用它,因为它不能唯一地被识别为去扁平,并且使代码变得丑陋。
  • .:专门为成员-数据.我猜这是用来访问嵌入式对象的。
  • /:没有运气。为什么?
  • #:在车把模板中特殊,所以不要这么做
  • >:没有。为什么?
  • ::特殊的属性绑定和其他东西,所以不要尝试它。
  • _:不幸的是,我的很多房产都有下划线(还有,余烬会损坏它们)
  • -:不幸的是,我不是很一致,我的一些属性都有破折号--没有人是完美的!:)

我需要的是一个具有以下属性的字符:

  • 是唯一的,所以我可以在服务器上自动将其压平/压缩
  • 可以安全地在模板中使用。
  • 可以安全地与.get.set.property.observes和任何其他与成员相关的功能一起使用。
  • 不会使我的代码不可读:我当然可以使用像XXX这样的东西作为分隔符,但是这会使我的模板和ember代码变得很难看。

我的问题:

  • 以前有人遇到过这个问题吗?你是怎么解决的?
  • 最重要的是:我可以用什么角色作为分隔符来避免惊喜呢?
  • 奇怪的是:成员数据团队中没有人使用CouchDB或MongoDB (或任何NoSQL)作为数据存储?结构化文档在这些数据库中是很自然的。

更新

标识符的车把只有某些允许的字符,所以这就排除了我尝试的很多东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 13:18:47

字符§对我的目的是很好的:它不与工具栏/成员/成员-数据冲突,并且在javascript属性中被允许。到目前为止,我的扁平文件工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21750182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档