Angular Kendo Splitter связывает данные только на первой панели

У меня возникли проблемы с выяснением, почему Angular не связывает данные нигде после первой панели моего разделителя Kendo-UI.

Вот соответствующий HTML-код с посторонним использованием {{formData.hello}}, чтобы проиллюстрировать, когда возникает проблема:

<div ng-controller="MyCtrl">
    <p>A = {{formData.hello}}</p>
    <div id="idLeftRight">
        <div>
            <p>Content on the left.</p>
            <p>B = {{formData.hello}}</p>
        </div>
        <div>
            <p>Content on the right.</p>
            <p>C = {{formData.hello}}</p>
        </div>
    </div>
    <p>D = {{formData.hello}}</p>
</div>

Выше показано «A = Hello world» и «B = Hello world», но «C = {{formData.hello}}» и «D = {{formData.hello}}».

Если вторая панель (div, содержащая «C =») удалена, поэтому в разделителе остается только одна панель, то «D = Hello world» появляется, как и ожидалось.

Вот Javascript:

angular.module("app", [ "kendo.directives" ]);

function MyCtrl($scope) {      
    $scope.formData = {};
    $scope.formData.hello = "Hello world";

    $('#idLeftRight').kendoSplitter({
        orientation: "horizontal",
        panes: [
            { collapsible: false, size: "30%" },
            { collapsible: false },
        ]
    });
}

Планкер: проблема с разделителем кендо

Однако, если я изменю div с идентификатором "idLeftRight" на:

<div kendo-splitter
    k-panes="[ { collapsible: false, size: '30%' } , { collapsible: false } ]"
    k-orientation="horizontal">

тогда это работает.

Почему kendoSplitter() ведет себя иначе, чем kendo-splitter? Я делаю что-то неправильно?


person Lucy    schedule 04.05.2015    source источник


Ответы (1)


Поскольку вы находитесь в приложении Angular, вы должны использовать разметку для определения своего сплиттера Kendo (как вы уже пробовали и работаете) вместо изменения DOM с помощью javascript внутри вашего контроллера (что вы делаете, когда вызываете $('#idLeftRight').kendoSplitter({...}) .

Вы заметите в своем Plunker, если откроете консоль браузера, что при оценке вашего javascript-вызова kendoSplitter появляется следующая ошибка:

TypeError: Cannot read property 'childNodes' of undefined
    at compositeLinkFn (angular.js:6108)
    at compositeLinkFn (angular.js:6108)
    at compositeLinkFn (angular.js:6108)
    at nodeLinkFn (angular.js:6705)
    at compositeLinkFn (angular.js:6105)
    at compositeLinkFn (angular.js:6108)
    at compositeLinkFn (angular.js:6108)
    at publicLinkFn (angular.js:6001)
    at angular.js:1449
    at Scope.$get.Scope.$eval (angular.js:12701)

что затем приводит к тому, что C и D не связаны правильно. Я сам не совсем уверен, в чем именно заключается проблема, однако мне кажется, что ваш вызов kendoSplitter() заставляет Kendo изменять DOM вне цикла дайджеста Angular, который «сбивает с толку» Angular и ломает вашу страницу.

person Christina    schedule 05.05.2015