2017-07-02 76 views
0

我想使我的Keystone列表對象只有在對象未發佈時纔可編輯。這裏是我的降低列表定義:根據字段值設置關鍵字列表「noedit」?

var Campaign = new keystone.List('Campaign', { 
    nodelete: true, 
    track: { 
    createdAt: true, 
    }, 
}); 

Campaign.add({ 
    ..., 
    publish: { 
    type: Types.Boolean, 
    required: false, 
    initial: false, 
    dependsOn: { 
     publishedOn: '', 
    }, 
    }, 
    publishedOn: { 
    type: Types.Datetime, 
    label: 'Published On', 
    hidden: true, 
    }, 
}); 

是否有可能設置noedit只有publishedOn不爲空?我試圖防止對象在「發佈」之後被修改,並且我將簡要介紹示例。

回答

0

有趣的是,我能夠使publish場只需檢查本身:

Campaign.add({ 
    ..., 
    publish: { 
    type: Types.Boolean, 
    required: false, 
    initial: false, 

    dependsOn: { 
     publish: false, 
    }, 

    }, 
    ..., 
}); 

,現在這隻能說明,如果publishfalse,該工程完全按照我希望的那樣。

0

列表或字段的noedit屬性是模型定義的一部分,而不是單個項目定義的一部分。除非您希望將其作爲整體應用於字段或模型,否則無法在管理UI中將單個項目標記爲不可編輯。

如果你對清晰度不太擔心了,更擔心的是確保它不能被編輯,你可以嘗試以下方法:

Campaign.schema.post('init', function() { 
    if (this.published) this.invalidate('Published items cannot be edited'); 
}); 

這將導致拋出一個錯誤,如果你試圖保存項目一旦發佈。

儘管您可以使用dependsOn: { published: { $exists: true } }來過濾字段,但這會隱藏信息。