Model属性slugs和comments应该在模型层中吗?

时间:2011-03-03 09:36:15

标签: javascript ruby-on-rails ruby sproutcore

我正在使用Sproutcore和Rails,并想知道在哪里放置属性slugs和注释等字符串。

在模型层中,我有一些模型类,例如。

SC.User = SC.Record.extend({

  firstName: '',

})

我应该在模型类中放置属性slugs和注释:

SC.User = SC.Record.extend({

  firstName: '',
  firstNameSlug: 'First name',
  firstNameComment: 'Enter your first name',

})

或者这些是否应该在与模型分离的视图中?

在模型类中使用的好处是我现在可以拥有一个通用视图,它可以迭代所有模型属性并自动显示它们。

您怎么看?

1 个答案:

答案 0 :(得分:1)

Sproutcore基于模型 - 视图 - 控制器范例,而且它使用相当保守的严格版本的mvc。您的模型应该只包含某个域对象的实际值。因此,您不应将注释和占位符字符串放在模型对象中。

而是使用控制器绑定到模型对象以及要从视图中消除的所有其他属性。典型的控制器设置可能如下所示

YourApp.userController = SC.ObjectController.extends({
    user: SC.User.create({ ... }), // Create a new user or load one from the store
    firstNamePlaceholder: 'First name',
    firstNameComment: 'Enter your first name',
    ...
});

将控制器内定义的一个或多个对象中的控制器内的其他属性组合起来进行某些分组可能是有意义的,例如

YourApp.userController = SC.ObjectController.extends({
    user: SC.User.create(),
    placeholder: SC.Object.create({
        firstName: 'First name',
        lastName:  'Last name',
    }),
    comment: SC.Object.create({
        firstName: 'Enter your first name',
        lastName: 'Enter your last name'
    })
});

这可能会在以后的视图中产生更清晰的结构。

简而言之,将模型对象视为传统域对象而不使用类参数仅使用对于域对象的每个实例(可能)唯一的参数。其他所有内容都会进入您的控制器层。确保您的视图尽可能保留为转储,并且仅包含对所有必需应用程序状态的绑定。