如何在钛中获得 Alloy.Models.room_module 的属性

how can I get the attribute of Alloy.Models.room_module in titanium

这是我的代码:

room_module = Alloy.Models.room_module
console.info "=========room_module======="
console.info room_module
console.info "=========room_module.get room_1======="
console.info room_module.get "room_1"
console.info "=========room_module.room_1======="
console.info room_module.room_1

这是控制台输出:

[iphone, 8.2, 192.168.1.126] =========room_module=======
[INFO] [iphone, 8.2, 192.168.1.126] {
    "room_1": "客餐厅",
    "room_2": "卧室",
    "room_3": "厨房",
    "room_4": "room",
    "room_5": "room",
    "room_6": "room"
}
[INFO] [iphone, 8.2, 192.168.1.126] =========room_module.get room_1=======
[INFO] [iphone, 8.2, 192.168.1.126] 客餐厅
[INFO] [iphone, 8.2, 192.168.1.126] =========room_module.room_1=======
[INFO] [iphone, 8.2, 192.168.1.126]

为什么room_module.room_1取不到值?我想在我的 xml 文件中显示 room_module.room_1。我该怎么做?

如您所知,Alloy 模型继承自 Backbone。当您调用 Model.get 函数时,这是 what's happening:

// Get the value of an attribute.
    get: function(attr) {
      return this.attributes[attr];
    },

当您调用 console.info(Model) 时,它可能正在执行 Model.toJSON(它没有 toString 方法):

// Return a copy of the model's `attributes` object.
    toJSON: function(options) {
      return _.clone(this.attributes);
    },

我看到两种可能性:

  1. room_module.attributes['room_1']
  2. room_module.toJSON().room_1

Alloy docs 中没有说明在 xml 文件中访问您的模型。您需要从控制器访问它。

backbone js使用属性对象来存储属性。在您的情况下,您需要执行 roommodule.get('room1')。为了保持一致,使用 get 和 set 而不是直接通过 roommodule.attributes.room1 访问始终是一个好习惯。

因为它可能会触发模型内部的一些事件。