2016-08-21 48 views
0

Aurelia 1.0を学習しようとすると、カスタム要素の双方向バインディングが機能しないようです。カスタム要素のAurelia双方向バインディングが機能しない

日付範囲-picker.js

import {bindable, bindingMode, inject} from 'aurelia-framework'; 
import $ from 'jquery'; 
import datepicker from 'bootstrap-datepicker'; 

@inject(Element) 
export class DateRangePicker { 
    @bindable startName = 'start'; 
    @bindable endName = 'end'; 
    @bindable startValue = null; 
    @bindable endValue = null; 

    constructor(element) { 
    this.element = element; 
    } 

    attached() { 
    $(this.element).find('.input-daterange').datepicker(); 
    } 
} 

日付範囲-picker.html

<template> 
    <div class="input-daterange input-group" id="datepicker"> 
    <input type="text" class="input-sm form-control" 
     name="${startName}" id="${startName}" 
     value.two-way="startValue" 
     placeholder="Start Date (mm/dd/yyy)" /> 
    <span class="input-group-addon">to</span> 
    <input type="text" class="input-sm form-control" 
     name="${endName}" id="${endName}" 
     value.two-way="endValue" 
     placeholder="End Date (mm/dd/yyy)"/> 
    </div> 
</template> 

私は日付範囲ピッカーのカスタム要素を作ったブートストラップ日付ピッカーを使用します

カスタム要素がleads.htmlで使用されています。

<div class="col-sm-12"> 
    <form role="form" class="form-inline" submit.delegate="search()"> 
    <div class="form-group"> 
     <date-range-picker 
     start-name="createdAtStartDate" start-value.two-way="startDate" 
     end-name="createdAtEndDate" end-value.two-way="endDate"> 
     </date-range-picker> 
    </div> 
    <button type="submit" class="btn btn-primary">Search</button> 
    </form> 
</div> 

leads.js

import {inject} from 'aurelia-framework'; 
import {LeadsService} from './leads-service'; 
import moment from 'moment'; 

@inject(LeadsService) 
export class Leads { 
    startDate = moment().format('M/D/YYYY'); 
    endDate = moment().format('M/D/YYYY'); 
    leads = []; 

    constructor(dataService) { 
    this.dataService = dataService; 
    } 

    search() { 
    this.dataService.getLeads({ 
     startDate: this.startDate, 
     endDate: this.endDate 
    }) 
    .then(leads => this.leads = leads); 
    } 
} 

日付範囲ピッカーの作品は予想通りとどのような値が正しくカスタム要素に入力ボックスにバインドされているleads.jsでたstartDateとendDateにに設定されているが、私は提出したときフォームのstartDateとendDateは、入力ボックスの値を変更しても変更されません。

私が間違っていることは何ですか?

答えて

2

値ではJavaScriptによって更新されているので、あなたはこのように、入力の変更イベントをディスパッチする必要があります。

ここ
attached() { 
    $(this.element).find('.input-daterange').datepicker() 
     .on('changeDate', e => { 
     e.target.dispatchEvent(new Event('change')); 
     }); 
    } 

https://gist.run/?id=5d047c561cf5973cf98e88bae12f4b4e

+0

は、私が実際に最初にすることを試みた実行している一例だが、私はまだ取得します同じ結果。私はあなたが述べたようにdefaultBindingModeを指定するためにstartValueとendValueの両方を変更しましたが、まだ動作しません。カスタム要素を使用せず、入力テキストボックスと双方向バインディングを使用してみました。カスタム要素では機能しないようです。 – Gino

+0

私はそれが何か違いがあるかどうかはわかりませんが、バインド可能な宣言から "= null"を削除してみてください。 '@bindable({defaultBindingMode:bindingMode.twoWay})startValue; // no = null here' –

+0

残念ながら、 "= null"を削除しても、双方向バインディングはまだ動作しません。 '@bindable({defaultBindingMode:bindingMode.twoWay})startValue;' – Gino

関連する問題