Как определить постоянное свойство в JXA

В AppleScript я бы написал

property foo: "value"

и значение будет сохранено между запусками. Как я могу сделать это в Javascript для автоматизации?

1 ответ

Решение

JavaScript для автоматизации не имеет прямой параллели для механизма постоянного свойства (и глобального значения) AS, но он имеет JSON.stringify() а также JSON.parse(), которые хорошо работают для простой сериализации и извлечения состояния.

Возможно, что-то вроде:

(function () {
    'use strict';

    var a = Application.currentApplication(),
        sa = (a.includeStandardAdditions = true, a),
        strPath = sa.pathTo('desktop').toString() + '/persist.json';

    // INITIALISE WITH RECOVERED VALUE || DEFAULT
    var jsonPersist = $.NSString.stringWithContentsOfFile(strPath).js || null,
        persistent = jsonPersist && JSON.parse(jsonPersist) || {
            name: 'perfume',
            value: 'vanilla'
        };
    /*********************************************************/

    // ... MAIN CODE ...

    // recovered or default value
    sa.displayNotification(persistent.value);

    // mutated value
    persistent.value = "Five Spice"

    /*********************************************************/

    // WRAP UP - SERIALISE TO JSON FOR NEXT SESSION
    return $.NSString.alloc.initWithUTF8String(
        JSON.stringify(persistent)
    ).writeToFileAtomically(strPath, true);

})();

(Более полный пример здесь: https://github.com/dtinth/JXA-Cookbook/wiki/Examples)

Или, для простых пар ключ-значение, а не произвольных структур данных, смотрите: /questions/35470928/ispolzujte-javascript-dlya-avtomatizatsii-jxa-dlya-sozdaniya-spiska/35470945#35470945 о поддержке JXA для записи и чтения.plist

Другие вопросы по тегам