KRL с помощью пчелиного укуса в расширенных кавычках - PullRequest
3 голосов
/ 17 января 2011

Каковы действительные выражения жала пчелы в расширенной кавычке?

rule set_persistents {
  select when pageview ".*"
  noop();
  always {
    ent:ecount += 1 from 1;
    app:acount += 1 from 1;
  }
}

rule test_bee_stings {
  select when pageview ".*"
  pre { 
    sum = ent:ecount + app:acount;
    content = <<
      sum is #{sum}<br/>
      sum + 1 is #{sum+1}<br/>
      ecount is #{ent:ecount}<br/>
      acount is #{app:acount}
    >>;
  }
  notify("Results", content) with sticky = true;
}

Когда я запускаю это, я ничего не получаю (никогда не вижу в окне уведомления).Если я удалю строки ecount и acount, я получу

sum is 2
sum + 1 is 21

Какие выражения пчел действительны в расширенной кавычке?Отличается ли это от обычной строки в кавычках?

1 Ответ

2 голосов
/ 17 января 2011

Переменные, используемые в beestings в расширенных кавычках, должны уже иметь назначенное значение и не быть выражением. Это связано с тем, что beestings в расширенных кавычках оцениваются на стороне клиента, а не на стороне сервера. Я также, по ранее объясненной причине, не рекомендовал бы использовать 'sum + 1' в beesting, даже если в настоящее время он работает для конечных точек, которые понимают JavaScript.

Вот как я бы написал, что вы пытаетесь сделать:

ruleset a60x546 {
  meta {
    name "extended-quotes-beesting"
    description <<
      extended-quotes-beesting
    >>
    author "Mike Grace"
    logging on
  }

  rule test_bee_stings {
    select when pageview ".*"
    pre { 
      ecount = ent:ecount + 1;
      acount = app:acount + 1;
      sum = ecount + acount;
      sumplus = sum + 1;
      content = <<
        sum is #{sum}<br/>
        sum + 1 is #{sumplus}<br/>
        ecount is #{ecount}<br/>
        acount is #{acount}
      >>;
    }
    {
      notify("Results", content) with sticky = true;
    }
    always {
      ent:ecount += 1 from 1;
      app:acount += 1 from 1;
    }
  }
}

действие приложения запускается несколько раз на example.com с помощью букмарклета: alt text

* Я бы также не советовал использовать предыдущее правило postlude для изменения переменных приложения и сущности, которые вы затем используете в следующем правиле, ожидая, что оно будет увеличено. Хотя то, что вы сделали, работает семантически грязно и, вероятно, будет немного чище, как я продемонстрировал.

** следует принимать с крошкой соли, так как это мнение только одного сумасшедшего. :) *

...