2016-05-27 17 views

Antwort

0

Nach einem Tag der Untersuchung fand ich zwei Probleme, die Crawling verhindert.

1. Eingabe-Validierungskomponente.

import Ember from 'ember'; 

const { 
    computed, 
    observer, 
    defineProperty, 
    run 
} = Ember; 

export default Ember.Component.extend({ 
    classNames: ['form-group', 'has-feedback', 'validated-input'], 
    classNameBindings: ['isValid:has-success', 'showErrorClass:has-error'], 
    isValid: false, 
    model: null, 
    value: null, 
    rawInputValue: null, 
    type: 'text', 
    valuePath: '', 
    placeholder: '', 
    attributeValidation: null, 
    isTyping: false, 

    didValidate: computed.oneWay('targetObject.didValidate'), 

    showErrorClass: computed('isTyping', 'showMessage', 'hasContent', 'attributeValidation', function() { 
    return this.get('attributeValidation') && !this.get('isTyping') && this.get('showMessage'); 
    }), 

    hasContent: computed.notEmpty('rawInputValue'), 

    isValid: computed.and('hasContent', 'attributeValidation.isValid'), 

    isInvalid: computed.oneWay('attributeValidation.isInvalid'), 

    inputValueChange: observer('rawInputValue', function() { 
    this.set('isTyping', true); 
    run.debounce(this, this.setValue, 500, false); 
    }), 

    showMessage: computed('attributeValidation.isDirty', 'isInvalid', 'didValidate', function() { 
    return (this.get('attributeValidation.isDirty') || this.get('didValidate')) && this.get('isInvalid'); 
    }), 

    setValue() { 
    this.set('value', this.get('rawInputValue')); 
    this.set('isTyping', false); 
    }, 

    init() { 
    this._super(...arguments); 
    var valuePath = this.get('valuePath'); 
    defineProperty(this, 'attributeValidation', computed.oneWay(`model.validations.attrs.${valuePath}`)); 
    this.set('rawInputValue', this.get(`model.${valuePath}`)); 
    defineProperty(this, 'value', computed.alias(`model.${valuePath}`)); 
    } 
}); 

Ich ersetzte diese Komponente durch neuere.

2.Dieser Stück Code (Ich schrieb es für Performance-Optimierung):

ingredients: function() { 
    var self = this; 
    return DS.PromiseArray.create({ 
     promise: new Promise((resolve, reject) => { 
     let loadedIngredients = self.store.peekAll('ingredient'); 
     if (loadedIngredients && loadedIngredients.get('length') > 0) { 
      let mappedIngredients = self.get('recipe').get('ingredientsWithQuantities').map(function(item) { 
      return { 
       name: self.store.peekRecord('ingredient', item.ingredientId).get('name'), 
       quantity: item.quantity 
      }; 
      }); 
      resolve(mappedIngredients); 
     } else { 
      this.store.findAll('ingredient').then(function() { 
      let mappedIngredients = self.get('recipe').get('ingredientsWithQuantities').map(function(item) { 
       return { 
       name: self.store.peekRecord('ingredient', item.ingredientId).get('name'), 
       quantity: item.quantity 
       }; 
      }); 
      resolve(mappedIngredients); 
      }) 
     } 
     }) 
    }); 
    }.property('recipe.ingredientsWithQuantities') 

ich diese beide Sache festgelegt und jetzt Google bietet die Lage, meine app zu machen.

1

können Sie Ember Fastboot verwenden - https://www.ember-fastboot.com/ oder einen Service wie http://www.emberjsseo.com/

Viel Glück verwenden!

+0

Leider kann ich FastBoot aufgrund von Umgebungseinschränkungen nicht verwenden. Eigentlich habe ich mir schon verschiedene Online-Dienste angeschaut, die Server-Rendering für Crawler anbieten, aber plötzlich sah ich das: http://discuss.emberjs.com/t/how-to-build-a-sitemap/10655/6. Also habe ich festgestellt, dass Google Crawler meine App indexieren könnte. – Crabar