2017-06-25 67 views
0

有一個簡單的帶有ListView的NS/TS頁面 - 該列表由ObservableArray驅動。Nativescript - onItemLoading回調調用兩次

我向數組中添加1個條目,並將onItemLoading事件調用爲2x。

這裏是我的XML

 <ListView items="{{ dataItems }}" 
 
       itemLoading="{{ onItemLoading }}" 
 
       itemTap="{{ onNoteTap }}" 
 
       itemTemplateSelector="'note'"> 
 

 
     <ListView.itemTemplates> 
 
      <template key="note"> 
 
       <StackLayout> 
 
        <Label id="label"/> 
 
       </StackLayout> 
 
      </template> 
 

 
      </ListView.itemTemplates> 
 
     </ListView>

這裏是我的模型類

export class NotesModel extends observable.Observable 
 
{ 
 
    public _listItemArray: ObservableArray<NoteItem>; 
 

 
    constructor() 
 
    { 
 
     super(); 
 

 
     this._listItemArray = new ObservableArray<NoteItem>(); 
 

 
     let item = new NoteItem(); 
 

 
     item.label = "test"; 
 

 
     this._listItemArray.push(item); 
 
    } 
 

 
    get dataItems(): ObservableArray<NoteItem> 
 
    { 
 
     return this._listItemArray; 
 
    } 
 

 
    onItemLoading(args: listviewModule.ItemEventData) 
 
    { 
 
     console.log("onItemLoading =" + args.index + " " + args.view); 
 
    } 
 

 
    onNoteTap(args) 
 
    { 
 
    } 
 
}

後,我運行代碼,我得到:

JS:構造

JS:onItemLoading = 0 StackLayout(217)@file:///app/my-notes-page.xml:39:15;我們可以通過下面的代碼來實現這個功能:我們可以通過下面的代碼來實現這個功能:1)StackLayout(217)@file:///app/my-notes-page.xml:39:15;

回答

0

這是你的xml文件

<ListView items="{{ dataItems }}" 
    itemLoading="onItemLoading" 
    itemTap="{{ onNoteTap }}" 
    itemTemplateSelector="'note'"> 

<ListView.itemTemplates> 
    <template key="note"> 
    <StackLayout> 
      <Label id="label"/> 
    </StackLayout> 
    </template> 

</ListView.itemTemplates> 
</ListView> 

這是您的main.ts文件中的代碼,它不是TS

import { EventData } from 'data/observable'; 
import { Page } from 'ui/page'; 
import { HelloWorldModel } from './main-view-model'; 

// Event handler for Page "navigatingTo" event attached in main-page.xml 
export function navigatingTo(args: EventData) { 

    let page = <Page>args.object; 

    page.bindingContext = new HelloWorldModel(); 
} 
export function onItemLoading(args) { 
    console.log('Calling here '); 
} 
+0

,我相信我寫的是有效的模型 - 模型方法onItemLoading被稱爲。只是爲了測試,我將它定義爲頁面方法 - 它被稱爲2x。你可以在HelloWorldModel構造函數中添加1條到ListView,看看會發生什麼。 – dashman

+0

請在這裏找到完整的項目https://github.com/santoshanand/ns-list-sample –

+0

我下載並運行它。 onItemLoading()方法被調用16次 - 頁面被刷新4次。我使用核心3.0.1和android 3.1.1的NS 2.5.3。 – dashman