首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Batman.js模型编码问题

Batman.js模型编码问题
EN

Stack Overflow用户
提问于 2014-08-10 17:20:50
回答 1查看 52关注 0票数 1

我遇到了一个有趣的问题,一个复杂的模型关联。

我有一个项目,它有许多任务,也有一个唯一的任务,它从它自己的信息。(可以将任务转换为项目,以便在项目下面嵌入其他任务)

代码语言:javascript
复制
class Settr.Project extends Batman.Model
  @resourceName: 'projects'
  @storageKey: 'projects'

  @persist Batman.RailsStorage, serializeAsForm: false

  @belongsTo 'owner', name: 'User', inverseOf: 'projects'
  @belongsTo 'task',  inverseOf: 'project'
  @hasMany 'tasks'


  @encode 'task_id', 'owner_id'
  @encodeTimestamps()

任务模型可能属于一个项目的hasMany关系,或者如果它是“任务”属性的反义词,它可能会发挥一个hasOne关系。

代码语言:javascript
复制
class Settr.Task extends Batman.Model
  @resourceName: 'tasks'
  @storageKey: 'tasks'

  @persist Batman.RailsStorage, serializeAsForm: false

  @belongsTo 'user'
  @belongsTo 'project', inverseOf: 'task', saveInLine: true
  @hasOne 'project'
  @hasMany 'entries', name: 'TaskEntry', inverseOf: 'task', saveInline: true

  @accessor 'lastEntry', ->
    @get('entries').reduce (a, b) ->
      (if a.created_at < b.created_at then a else b)

  @encode 'user_id', 'project_id'
  @encodeTimestamps()

在未来,我将实现任务重复的能力,并允许查看给定任务发生的历史。这个模型用TaskEntry表示。

代码语言:javascript
复制
class Settr.TaskEntry extends Batman.Model
  @resourceName: 'entries'
  @storageKey: 'entries'

  @persist Batman.RailsStorage

  @PRIVACY_OPTIONS = ['is_public', 'is_private', 'is_follower']
  @DIFFICULTY_OPTIONS = ['','easy', 'moderate', 'hard']
  @STATUS_OPTIONS = ['incomplete', 'complete']

  @belongsTo 'task', inverseOf: 'entries'
  @urlNestsUnder 'task'

现在问题来了。当我想发布一个新的项目时,我必须为这个项目嵌入一个新的任务,并给这个任务一个TaskEntry并设置它的标题属性。(标题是唯一需要的字段)

有趣的是,当我的项目被格式化如下:(与上面相同)

代码语言:javascript
复制
class Settr.Project extends Batman.Model
  @resourceName: 'projects'
  @storageKey: 'projects'

  @persist Batman.RailsStorage, serializeAsForm: false

  @belongsTo 'owner', name: 'User', inverseOf: 'projects'
  @belongsTo 'task',  inverseOf: 'project'
  @hasMany 'tasks'

  @encode 'task_id', 'owner_id'
  @encodeTimestamps()

我可以检索项目,但不能发布一个新的项目。

如果我在项目模型中编码了“任务”,那么我就能够成功地发布,但不再能够检索。下面的例子。

代码语言:javascript
复制
class Settr.Project extends Batman.Model
  @resourceName: 'projects'
  @storageKey: 'projects'

  @persist Batman.RailsStorage, serializeAsForm: false

  @belongsTo 'owner', name: 'User', inverseOf: 'projects'
  @belongsTo 'task',  inverseOf: 'project'
  @hasMany 'tasks'

  @encode 'task_id', 'owner_id', 'task'
  @encodeTimestamps()

@encode上的Batman.js API文档中,我发现@encode可以像这样定制。

代码语言:javascript
复制
@encode 'myProperty',
  decode: (value, key, incomingJSON, outgoingObject, record) -> # returns a value to set on the record
  encode: (value, key, builtJSON, record) ->                    # returns a value to put into the JSON
  as: "my_property"                                             # overrides "myProperty" as the JSON key

但我不太确定这是否对我是正确的解决方案,或者我的问题是否在其他地方。如果这是我想要的解决方案,我如何适当地使用它?这些文件有点超出我的想象。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-10 18:43:40

这可能是由命名冲突引起的:

代码语言:javascript
复制
@belongsTo 'project', inverseOf: 'task', saveInLine: true
@hasOne 'project'

它为project定义了两个访问器--我认为后面的访问器会覆盖前面的访问器。

您可以在不更改JSON的情况下重命名hasOne关联:

代码语言:javascript
复制
@hasOne 'special_project', foreignKey: 'project_id'

(必须提供foreignKey,否则它将默认为special_project_id)

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

https://stackoverflow.com/questions/25231145

复制
相关文章

相似问题

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