使用materializecss和aurelia

Ted*_*ino 3 javascript materialize aurelia

我想询问是否有一步一步的方法来使用或配置与Aurelia的materializecss.我目前能够运行我的Aurelia应用程序,直到我的index.html看起来像这样的教程:

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
   <link href="jspm_packages/github/dogfalo/materialize@0.97.0/dist/css/materialize.css" rel="stylesheet" />
   <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
   <title></title>
</head>
<body aurelia-app>
   <script src="jspm_packages/system.js"></script>
   <script src="config.js"></script>
   <script>
      System.import('aurelia-bootstrapper');
   </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我目前正在使用ASP .NET 5 Preview空模板和jspm来安装Aurelia.我已经安装了materializecss jspm install github:dogfalo/materialize并从这个链接复制了一些HTML代码来测试它是否有效.

这段代码进入了我的app.html文件

<template>
<ul class="collapsible" data-collapsible="accordion">
    <li>
        <div class="collapsible-header"><i class="material-icons">filter_drama</i>First</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
    <li>
        <div class="collapsible-header"><i class="material-icons">place</i>Second</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
    <li>
        <div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
</ul>
</template>
Run Code Online (Sandbox Code Playgroud)

而我的app.html文件有这个测试

export class App {
    constructor() {
       this.message = 'test app';
    }
}
Run Code Online (Sandbox Code Playgroud)

我的package.json目前包含这些

{
 "jspm": {
   "directories": {
   "baseURL": "wwwroot"
 },
 "dependencies": {
   "aurelia-bootstrapper": "github:aurelia/bootstrapper@^0.16.0",
   "aurelia-framework": "github:aurelia/framework@^0.15.0",
   "dogfalo/materialize": "github:dogfalo/materialize@^0.97.0"
 },
 "devDependencies": {
   "babel": "npm:babel-core@^5.8.22",
   "babel-runtime": "npm:babel-runtime@^5.8.20",
   "core-js": "npm:core-js@^1.1.0"
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

当我浏览Chrome中的index.html文件时,我可以看到格式良好的可折叠,但是当我点击任何标题时,正文将无法展开.似乎没有引用js文件或jspm没有正确配置js文件.

Jer*_*yow 8

你几乎就在那里 - 物化库有一个javascript组件,可以启用一些功能.在可折叠组件的文档中,有以下内容:

初始化

可折叠元素只有在动态添加时才需要初始化.您也可以在初始化中传入选项,但这也可以在HTML标记中完成.

$(document).ready(function(){
    $('.collapsible').collapsible({
      accordion : false // A setting that changes the collapsible behavior to expandable instead of the default accordion style
    });
  });
Run Code Online (Sandbox Code Playgroud)

这些说明对静态页面很有用,但对像您这样的单页应用程序没有帮助.您无法使用,$(document).ready因为当该事件触发时,该组件不在页面上.

使组件工作最简单的方法是为视图模型提供对可折叠元素的引用,然后调用$(element).collapsible()它.这是怎么做的......

首先,将ref属性添加到ul:

<template>
<ul ref="myElement" class="collapsible" data-collapsible="accordion">
    <li>
        <div class="collapsible-header"><i class="material-icons">filter_drama</i>First</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
    <li>
        <div class="collapsible-header"><i class="material-icons">place</i>Second</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
    <li>
        <div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div>
        <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
    </li>
</ul>
</template>
Run Code Online (Sandbox Code Playgroud)

接下来,在元素附加到DOM时初始化可折叠:

export class App {
    constructor() {
       this.message = 'test app';
    }
    attached() {
       $(this.myElement).collapsible();
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,通过在app.js中添加以下行来确保加载materializecss jquery组件:

import materialize from 'dogfalo/materialize';
Run Code Online (Sandbox Code Playgroud)

如果你处理大量的视图或元素,所有这些都会变得乏味,所以你需要将这个逻辑包装在aurelia 自定义属性中以使事情更方便:

import {inject} from 'aurelia-framework';

@inject(Element)
export class CollapsibleCustomAttribute {
  constructor(element) {
    this.element = element;
  }

  attached() {
    ${this.element).collapsible();
  }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以简单地将collapsible属性添加到元素中,它将自动初始化materializecss的行为.