Ember CRUD应用程序

时间:2016-03-21 14:20:01

标签: ember.js ember-data ember-cli

您好我正在尝试开发库存清单数据以及CRUD应用程序以进行分配,但只显示库存清单数据。这是我的代码。它没有显示其他部分(即CRUD部分),也没有显示任何错误。我很贪图我认为这可能是一个愚蠢的错误,但我已经尝试了很多东西,但我迷失了,因为它没有抛出任何错误。我不是在寻找或任何支持,我不打算保存数据。我只是想显示EMBER.js的CRUD功能,例如 angular

这是我的HTML

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <title>Ember.js</title>
  <link rel="stylesheet" type="text/css" href="css/style.css" />

  <!-- EmberJS dependencies -->
  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <script src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.3.0.js"></script>
  <script src="http://builds.emberjs.com/tags/v1.8.1/ember.min.js"></script>
  <script src="http://builds.emberjs.com/tags/v1.0.0-beta.11/ember-data.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ember-localstorage-adapter/0.3.1/localstorage_adapter.js"></script>

  <!-- Lightstreamer JavaScript Client library -->
  <script src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.9/require.min.js"></script>
  <script src="http://demos.lightstreamer.com/commons/lightstreamer.js"></script>

  <!-- EmberJS code application -->
  <script src="js/stockListDemoApp.js"></script>
      <!-- Bootstrap -->
    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css">
</head>

<body>
  <script type="text/x-handlebars" data-template-name="stock">
    <div id="wrap">
      <div id="top">
        <a id="logoEmber" href="http://emberjs.com" target="_blank"><img src="images/ember_logo.png" alt="EMBERLOGO" hspace="0" border="0" /></a>
        <div id="title">STOCK-LIST</div>
      </div>
         <table cellspacing="0" cellpadding="2" width="780" border="0" >
        <thead>
          <tr class="tableTitle">
            <td>Name</td>
            <td>Last</td>
            <td>Time</td>
            <td>Change</td>
            <td>Bid Size</td>
            <td>Bid</td>
            <td>Ask</td>
            <td>Ask Size</td>
            <td>Min</td>
            <td>Max</td>
            <td>Ref.</td>
            <td>Open</td>
          </tr>
        </thead>

        <tbody>
          {{#each item in model}}
          <tr {{bind-attr class="item.isOdd:colOdd:colEven"}}>
            <td><div {{bind-attr class="item.isOdd:stockNameOdd:stockNameEven"}}>{{item.stock_name}}</div></td>
            <td>{{item.last_price}}</td>
            <td>{{item.time}}</td>
            <td>{{item.pct_change}}</td>
            <td>{{item.bid_quantity}}</td>
            <td>{{item.bid}}</td>
            <td>{{item.ask}}</td>
            <td>{{item.ask_quantity}}</td>
            <td>{{item.min}}</td>
            <td>{{item.max}}</td>
            <td>{{item.ref_price}}</td>
            <td>{{item.open_price}}</td>
          </tr>
          {{/each}}
        </tbody>
      </table>
      <div class="disc">Simulated market data.</div>
    </div>
  </br>
  </br>
<script type="text/x-handlebars" data-template-name="index">
      <div class="jumbotron">
        <h1>Welcome!</h1>
        <p>This app demonstrates CRUD with validation in Ember.js</p>
      </div>
    </script>

    <script type="text/x-handlebars" data-template-name="products">
      <h1>Products</h1>
      {{outlet}}
    </script>

    <script type="text/x-handlebars" data-template-name="products/index">
      <table id="products_table" class="table">
        <thead>
          <tr>
            <th>Name</th>
            <th>Author</th>
            <th>Price</th>
            <th><button type="button" class="btn btn-default new-button" {{action "new"}}><span class="glyphicon glyphicon-plus"></span></button></th>
          </tr>
        </thead>
        <tbody>
          {{#each product in model}}
            <tr {{bind-attr id=product.htmlID}}>
              <td class="name">{{#link-to "products.show" product}}{{product.name}}{{/link-to}}</td>
              <td class="author">{{product.author}}</td>
              <td class="price">{{product.price}}</td>
              <td class="action-buttons"><button type="button" class="btn btn-default edit-button" {{action "edit" product}}><span class="glyphicon glyphicon-pencil"></span></button>
                  <button type="button" class="btn btn-default delete-button" {{action "delete" product}}><span class="glyphicon glyphicon-remove"></button></td>
            </tr>
          {{/each}}
        </tbody>
      </table>
      <p id="products_count">Total: {{controllers.products.productsCount}} products.</p>
    </script>

    <script type="text/x-handlebars" data-template-name="products/show">
      <h2><span class="name">{{name}}</span></h2>
      <p>By <span class="author">{{author}}</span></p>
      <p><strong>$<span class="price">{{price}}</span></strong></p>
      <p><span class="description">{{description}}</span></p>
      <p class="action-buttons"><button type="button" class="btn btn-default edit-button" {{action "edit" model}}><span class="glyphicon glyphicon-pencil"></span></button>
          <button type="button" class="btn btn-default delete-button" {{action "delete" model}}><span class="glyphicon glyphicon-remove"></button></p>
      <p>{{#link-to 'products' class="index-link"}}Back to products index{{/link-to}}</p>
    </script>

    <script type="text/x-handlebars" data-template-name="products/edit">
      <h2>{{#if isNew}}New{{else}}Edit{{/if}} Product</h2>
      {{#form-for controller id="form-product" wrapper="bootstrap"}}
        {{#input name}}
          {{label-field name text="Product"}}
          {{input-field name class="form-control" autofocus="true"}}
          {{#if view.showError}}
            {{error-field name}}
          {{/if}}
        {{/input}}
        {{#input author}}
          {{label-field author text="Author"}}
          {{input-field author class="form-control"}}
          {{#if view.showError}}
            {{error-field author}}
          {{/if}}
        {{/input}}
        {{#input description}}
          {{label-field description text="Description"}}
          {{input-field description class="form-control"}}
          {{#if view.showError}}
            {{error-field description}}
          {{/if}}
        {{/input}}
        {{#input price}}
          {{label-field price text="Price"}}
          {{input-field price class="form-control"}}
          {{#if view.showError}}
            {{error-field price}}
          {{/if}}
        {{/input}}
        <button type="submit" class="btn btn-primary save-button" {{action "save" model}}>Save</button>
        {{#if isNew}}
        <button type="button" class="btn btn-default cancel-button" {{action "delete" model}}>Cancel</button>
        {{else}}
        <button type="button" class="btn btn-default cancel-button" {{action "cancel" model}}>Cancel</button>
        <button type="button" class="btn btn-danger delete-button" {{action "delete" model}}>Delete</button>
        {{/if}}
      {{/form-for}}
    </script>
  </script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/ember-data.js/1.0.0-beta.8/ember-data.min.js"></script>
    <!-- ember-easyForm -->
    <script src="http://builds.dockyard.com.s3.amazonaws.com/ember-easyForm/canary/shas/add6a40a68c8b081557a9011cf99ea255414e1b1/ember-easyForm.min.js"></script>
    <!-- ember-validations -->
    <script src="http://builds.dockyard.com.s3.amazonaws.com/ember-validations/canary/shas/2ff28c6ba4d227b0f863b327cdff23c381c37afb/ember-validations.min.js"></script>

</body>
</html>
and here is my app.js
App = Ember.Application.create();
App.ApplicationRoute = Ember.Route.extend({
    model: function() {
     return $.getJSON('https://ajax.googleapis.com/ajax/services/feed/load?' +
                  'v=1.0&num=50&q=https://news.google.com/news/feeds?output=rss&callback=?')
         .then(function(data){
         return data.responseData.feed.entries.map(function(entry){
            var post = {}; 
            post.title = entry.title;
            return post;
         });
     });
 }});
window.App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter.extend({
  namespace: 'ember-crud'
});
Ember.EasyForm.Config.registerWrapper('bootstrap', {
  formClass: '',
  fieldErrorClass: 'has-error',
  inputClass: 'form-group',
  errorClass: 'help-block error',
  hintClass: 'help-block',
  labelClass: ''
});
App.Router.map(function() {
  this.resource('products', function() {
    this.route('new');
    this.route('show', {path: '/:product_id'});
    this.route('edit', {path: '/:product_id/edit'});
  });
});
App.Product = DS.Model.extend(Ember.Validations.Mixin, {
  name: DS.attr('string'),
  author: DS.attr('string'),
  description: DS.attr('string'),
  price: DS.attr('number'),

  // To identify html tag for a Product.
  htmlID: function() {
    return 'product' + this.get('id');
  }.property('id'),

  validations: {
    name: {
      presence: true
    },
    price: {
      presence: true,
      numericality: {
        greaterThanOrEqualTo: 0
      }
    }
  }
});

App.resetFixtures = function() {
  App.Product.FIXTURES = [
    {
      id: 1,
      name: 'Ember.js in Action',
      author: 'Joachim Haagen Skeie',
      description: 'Ember.js in Action is a crisp tutorial that introduces the Ember.js framework and shows you how to build production-quality web applications.',
      price: 44.99
    },
    {
      id: 2,
      name: 'Building Web Applications with Ember.js',
      author: 'Jesse Cravens & Thomas Brady',
      description: 'This guide provides example-driven instructions on how to develop applications using Ember, one of the most popular JavaScript frameworks available.',
      price: 29.99
    },
    {
      id: 3,
      name: 'The Ember.js Way',
      author: 'Brian Cardarella & Alex Navasardyan',
      description: "Inspired by Addison-Wesley's classic The Rails Way series, The Ember.js Way crystallizes all that's been learned about Ember.js development into a start-to-finish approach that works.",
      price: 39.99
    },
    {
      id: 4,
      name: 'Instant Ember.JS Application Development: How-to',
      author: 'Marc Bodmer',
      description: 'A practical guide that provides you with clear step-by-step examples. The in-depth examples take into account the key concepts and give you a solid foundation to expand your knowledge and your skills.',
      price: 20.69
    }
  ];
};
App.resetFixtures();
App.ProductsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('product');
  },
  actions: {
    // Redirect to new form.
    new: function() {
      this.transitionTo('products.new');
    },
    // Redirect to edit form.
    edit: function(product) {
      this.transitionTo('products.edit', product);
    },
    // Save and transition to /products/:product_id only if validation passes.
    save: function(product) {
      var _this = this;
      product.validate().then(function() {
        product.save();
        _this.transitionTo('products.show', product);
      });
    },
    // Roll back and transition to /products/:product_id.
    cancel: function(product) {
      product.rollback();
      this.transitionTo('products.show', product);
    },
    // Delete specified product.
    delete: function(product) {
      product.destroyRecord();
      this.transitionTo('products');
    }
  }
});
App.ProductsController = Ember.ArrayController.extend({
  productsCount: function() {
    return this.get('model.length');
  }.property('@each')
});
App.ProductsIndexRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('products');
  }
});
App.ProductsIndexController = Ember.ArrayController.extend({
  needs: ['products'],
  sortProperties: ['name']
});
App.ProductsEditRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('product', params.product_id);
  },
  // Roll back if the user transitions away by clicking a link, clicking the
  // browser's back button, or otherwise.
  deactivate: function() {
    var model = this.modelFor('products.edit');
    if (model && model.get('isDirty') && !model.get('isSaving')) {
      model.rollback();
    }
  }
});
App.ProductsNewRoute = Ember.Route.extend({
  model: function() {
    return this.store.createRecord('product');
  },
  isNew: true,
  renderTemplate: function(controller, model) {
    this.render('products.edit', {
      controller: controller
    });
  },
// Roll back if the user transitions away by clicking a link, clicking the
  // browser's back button, or otherwise.
  deactivate: function() {
    var model = this.modelFor('products.new');
    if (model && model.get('isNew') && !model.get('isSaving')) {
      model.destroyRecord();
    }
  }
});

0 个答案:

没有答案