Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在模板中显示hasMany模型属性_Javascript_Ember.js_Handlebars.js_Ember Data - Fatal编程技术网

Javascript 如何在模板中显示hasMany模型属性

Javascript 如何在模板中显示hasMany模型属性,javascript,ember.js,handlebars.js,ember-data,Javascript,Ember.js,Handlebars.js,Ember Data,我有这些模型: var attr = DS.attr, belongsTo = DS.belongsTo, hasMany = DS.hasMany; Shoutzor.Album = DS.Model.extend({ artist: belongsTo('artist'), title: attr('string'), cover: attr('string') }); Shoutzor.Artist = DS.Model.extend({

我有这些模型:

var attr = DS.attr,
    belongsTo = DS.belongsTo,
    hasMany = DS.hasMany;

Shoutzor.Album = DS.Model.extend({
    artist: belongsTo('artist'),
    title: attr('string'),
    cover: attr('string')
});

Shoutzor.Artist = DS.Model.extend({
    name: attr('string'),
    profileimage: attr('string')
});

Shoutzor.User = DS.Model.extend({
    name:           attr('string'),
    firstname:      attr('string'),
    email:          attr('string'),
    joined:         attr('date'),
    last_active:    attr('date')
});

Shoutzor.Track = DS.Model.extend({
    title: attr('string'),
    length: attr('number'),
    artist: hasMany('artist'),
    album: hasMany('album'),

    /* Convert the length in seconds to a string like '01:55' */
    convertedLength: function() {
        var sec_num = parseInt(this.get('length'), 10); // don't forget the second parm
        var hours   = Math.floor(sec_num / 3600);
        var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
        var seconds = sec_num - (hours * 3600) - (minutes * 60);

        if (hours   < 10 && hours > 0) {hours   = "0"+hours;}
        if (minutes < 10 && minutes > 0) {minutes = "0"+minutes;}
        if (seconds < 10) {seconds = "0"+seconds;}
        var time    = ((hours != 0) ? hours + ':' : '') + ((minutes != 0) ? minutes +':' : '') + seconds;

        return time;
    }.property('length')
});

Shoutzor.History = DS.Model.extend({
    track: belongsTo('track'),
    user: belongsTo('user'),
    time_played: attr('date'),

    print_time: function() {
        var d = new Date(this.get('time_played'));

        var hours   = (d.getHours() < 10 ? "0" : '') + d.getHours(),
            minutes = (d.getMinutes() < 10 ? "0" : '') + d.getMinutes(),
            seconds = (d.getSeconds() < 10 ? "0" : '') + d.getSeconds();

        return  hours + ":" + minutes + ":" + seconds;
    }.property('time_played')
});
var attr=DS.attr,
belongsTo=DS.belongsTo,
hasMany=DS.hasMany;
Shoutzor.Album=DS.Model.extend({
艺术家:belongsTo(“艺术家”),
标题:attr('string'),
封面:attr('string')
});
Shoutzor.Artist=DS.Model.extend({
名称:attr('string'),
profileimage:attr('string')
});
Shoutzor.User=DS.Model.extend({
名称:attr('string'),
名字:attr('string'),
电子邮件:attr('string'),
加入:attr(“日期”),
上次激活:属性(“日期”)
});
Shoutzor.Track=DS.Model.extend({
标题:attr('string'),
长度:attr('number'),
艺术家:hasMany(“艺术家”),
唱片集:hasMany(“唱片集”),
/*将以秒为单位的长度转换为类似“01:55”的字符串*/
convertedLength:函数(){
var sec_num=parseInt(this.get('length'),10);//不要忘记第二个参数
var小时=数学楼层(秒数/3600);
var分钟=数学楼层((秒数-(小时*3600))/60);
var秒=秒数-(小时*3600)-(分钟*60);
如果(小时数<10&&hours>0){hours=“0”+hours;}
如果(分钟<10&&minutes>0){minutes=“0”+minutes;}
如果(秒<10){seconds=“0”+秒;}
变量时间=((小时!=0)?小时+':':'')+((分钟!=0)?分钟+':'':'')+秒;
返回时间;
}.property(“长度”)
});
Shoutzor.History=DS.Model.extend({
轨道:属于(“轨道”),
用户:belongsTo('user'),
播放时间:attr(“日期”),
打印时间:函数(){
var d=新日期(this.get('time_play');
变量小时=(d.getHours()<10?“0”:“)+d.getHours(),
分钟=(d.getMinutes()<10?“0”:“”)+d.getMinutes(),
秒=(d.getSeconds()<10?“0”:“”)+d.getSeconds();
返回时数+“:”+分钟+“:”+秒;
}.property(“播放时间”)
});
在我的模板中,我使用以下代码(在我的路径中,我将模型连接到这个.store.all('history'):


标题
艺术家
专辑
请求
时光流逝
{{{#每个模型}
{{track.title}
{{{if track.artist}{{{each track.artist}{{name}{{/each}{{else}}}未知艺术家{{/if}
{{{if track.album}{{{each track.abum}{{title}{{/each}}{{else}}未知专辑{{/if}
{{{if user}}{{user.name}{{else}}AutoDJ{{/if}
{{打印时间}
{{else}
没有可用的曲目历史记录
{{/每个}}
现在使用chrome ember扩展,我可以确认我的轨迹模型包含与艺术家模型的hasMany关系,但是它仍然显示为“未知艺术家”


我需要如何调整模板以使其显示“艺术家模型”属性(可选:如果有多个名称,请用逗号分隔)?

一切看起来都是正确的。您可以尝试指定each helpers,并尝试数组的长度,以验证其中是否确实存在项

此外,如果您认为应该存在某些内容,可以尝试使用log helper将其记录到控制台

{{#each history in model}}
    <tr>
        <td>{{history.track.title}}</td>
        Artist Count: {{history.track.artist.length}}
        {{log history.track.artist}}
        <td>{{#each artist in history.track.artist}}{{artist.name}}{{else}}Unkown Artist{{/each}}</td>
        <td>{{#each album in history.track.album}}{{album.title}}{{/each}}{{else}}Unknown Album{{/each}}</td>
        <td>{{#if history.user}}{{history.user.name}}{{else}}AutoDJ{{/if}}</td>
        <td>{{history.print_time}}</td>
    </tr>
{{else}}
    <tr>
        <td colspan="5">No track history available</td>
    </tr>
{{/each}}
{{{#模型中的每个历史记录}
{{history.track.title}
艺术家计数:{{history.track.Artist.length}
{{log history.track.artist}
{{{#历史上的每一位艺术家.track.artist}{{{artist.name}{{{else}}未知艺术家{{/each}
{{{#历史上的每一张专辑.track.album}{{album.title}{{{/each}{{else}}}未知专辑{{/each}
{{{#if history.user}{{history.user.name}{{{else}}AutoDJ{{/if}
{{history.print_time}
{{else}
没有可用的曲目历史记录
{{/每个}}
此外,要用逗号分隔模型上的列表,您需要使用新控制器呈现它,然后让它使用itemController。查看此jsbin:


Hmm我的错,看来默认情况下,余烬扩展将DS.manyArray分配给任何hasMany属性,而不是像belongsTo属性那样为null,现在必须首先调试该属性。
{{#each history in model}}
    <tr>
        <td>{{history.track.title}}</td>
        Artist Count: {{history.track.artist.length}}
        {{log history.track.artist}}
        <td>{{#each artist in history.track.artist}}{{artist.name}}{{else}}Unkown Artist{{/each}}</td>
        <td>{{#each album in history.track.album}}{{album.title}}{{/each}}{{else}}Unknown Album{{/each}}</td>
        <td>{{#if history.user}}{{history.user.name}}{{else}}AutoDJ{{/if}}</td>
        <td>{{history.print_time}}</td>
    </tr>
{{else}}
    <tr>
        <td colspan="5">No track history available</td>
    </tr>
{{/each}}