Я пытаюсь создать обертку для lunr.js (http://lunrjs.com/) в Dart, однако я не могу найти документацию о том, как использовать this
с помощью Dart js interop.Как создать объект из функции
Это объект, который я пытаюсь создать:
var index = lunr(function() {
this.field('title', {boost: 10})
this.field('body')
this.ref('id')
})
В настоящее время это все, что у меня есть.
JsObject index = new JsObject(context['lunr'], [()
{
}]);
Как я смог получить доступ к this
из анонимной функции?
И где я могу разместить фактические lunr.js? Я просто делаю обертку для этого, поэтому я не вижу никаких причин, чтобы иметь его в файле HTML, если это необходимо.
EDIT:
Я также попытался:
Создайте функцию, чтобы для использования this
ключевого слова. (До сих пор не уверен, что этот синтаксис является правильным)
_f = new JsFunction.withThis((t) {
t.callMethod('field', ['title', {boost: 10}])
t.callMethod('field', ['body'])
t.callMethod('ref', ['id'])
});
Затем создайте JsObject
с помощью этой функции:
JsObject index = new JsObject(context['lunr'], [_f]);
Это даст мне эту ошибку:
исключение: Необработанное исключение: Закрытие вызов с несогласованными аргументами: функция «звонок»
NoSuchMethodError: incorrect number of arguments passed to method named 'call'
Receiver: Closure: (dynamic) => dynamic
Tried calling: call(Instance of 'JsObject', Instance of 'JsObject')
Found: call(t)
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
Затем я попытался это:
JsObject index =new JsObject.fromBrowserObject(context['lunr']);
Это дает мне другую ошибку: Exception: Illegal argument(s): object cannot be a num, string, bool, or null
Это может быть потому, что я не есть способ вызова функции _f
при создании JSObject таким образом.
Что означает 'context ['lunr']' return? Доступен ли lunr в консоли js? – Ozan
'context ['lunr']' возвращает значение null. Он недоступен в консоли js. Lunr.js помещается в мой каталог web/lib/вместе с файлом 'LunrSearch.dart'. – kennyjwilli
вам нужно включить скрипт в html, например '' – Ozan