Расширение повторителя (или другого виджета с вложенными атрибутами тега XML) - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь расширить Repeater.Просто сделайте так:

// views/widgets/MyRepeater/MyRepeater.ts
import {Repeater} from "tns-core-modules/ui/repeater";

export class MyRepeater extends Repeater {}

Теперь я пытаюсь использовать его:

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:Test="views/widgets/MyRepeater/MyRepeater">
    <Test:MyRepeater items="{{ items }}">
        <Test:MyRepeater.itemsLayout>
            <StackLayout/>
        </Test:MyRepeater.itemsLayout>
        <Test:MyRepeater.itemTemplate>
            <Label text="{{ someBindingValue }}"></Label>
        </Test:MyRepeater.itemTemplate>
    </Test:MyRepeater>
</Page>

Он не выдаст никаких ошибок до первого изменения <ObservableArray>items.Я получаю такую ​​ошибку:

JS: TypeError: Cannot set property 'bindingContext' of undefined
JS:     at MyRepeater.Repeater.refresh (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/ui/repeater/repeater.js:48:38)
JS:     at MyRepeater.Repeater._requestRefresh (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/ui/repeater/repeater.js:34:18)
JS:     at MyRepeater.Repeater._onItemsChanged (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/ui/repeater/repeater.js:54:14)
JS:     at Object.handler [as callback] (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/ui/core/weak-event-listener/weak-event-listener.js:30:34)
JS:     at Observable.notify (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/data/observable/observable.js:110:23)
JS:     at ObservableArray.splice (file:///data/data/com.test/files/app/tns_modules/tns-core-modules/data/observable-array/observable-array.js:129:14)

Похоже, в коде tns-core-modules/ui/repeater/repeater.js:48:38 он пытается разобрать itemTemplate, но не может этого сделать.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вам нужно реэкспортировать все из tns-core-modules/ui/repeater примерно так: export * from 'tns-core-modules/ui/repeater'

0 голосов
/ 13 декабря 2018

Я думаю, что ваш пользовательский файл репитера должен экспортировать модуль knownTemplates, как это было сделано в оригинальной реализации , которая помогает анализатору XML идентифицировать шаблон.

export module knownTemplates {
    export const itemTemplate = "itemTemplate";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...