javascript - 如何从自定义 Kendo UI 数据源访问 Javascript 函数

标签 javascript angularjs firebase kendo-ui angularfire

我正在将 Kendo UI 与 AngularJS 1.x 结合使用。我还将 Firebase 与 AngularFire 库一起使用。因为我使用的是 Firebase,所以我决定扩展 Kendo UI 数据源,并将其命名为 kendo.data.FirebaseDataSource.js。

我的自定义数据源扩展了 Kendo UI 数据源,并在我想要访问 AngularFire 功能的位置添加了自定义传输。

例如,在 kendo.data.FirebaseDataSource.js 源中,我想访问 AngularFire 的 $firebaseArray 功能以及我创建的任何其他模块(实用函数等),它们驻留在另一个名为 my-custom-module.js 的文件,但我无法了解如何执行此操作。

我尝试执行以下操作,但它(显然)不起作用:

(function ($, kendo, firebase, $firebaseArray) {
    'use strict';

编辑

kendo.data.FirebaseDataSource.js

(function ($, kendo, firebase, $firebaseArray) {
 'use strict';

 var getCustomer = function () {

    var data = $firebaseArray(firebaseDataService.data);
    var listed = [];

    data.$loaded()
        .then(function(){
            angular.forEach(data, function(data){
                listed.push({
                    "firstName": data.firstName,
                    "lastName": data.lastName
                })
            })
        })


    return listed;
};


var firebaseTransports = {
    read: function (options) {
        var customers = getCustomers();

        options.success(customers);
    }
};

  kendo.data.extensions.FirebaseDataSource = kendo.data.DataSource.extend({
      init: function (options) {

        kendo.data.DataSource.fn.init.call(this, $.extend(true, {}, {      transport: firebaseTransports }, options));
        }
 }); 
})($, kendo, firebase, $firebaseArray);

编辑2

controllerGrid.js

var fbDataSource = new kendo.data.extensions.FirebaseDataSource({
            schema: {
                model: {
                    id: "id",
                    fields: {
                        firstName: { type: "string" },
                        lastName: { type: "string" }
                    }
                }
            }
        })

vm.gridOptions = {
    dataSource: fbDataSource

基于上述 controllerGrid.js 源代码,我只需为 Kendo UI Grid 小部件执行即可使用 kendo.data.FirebaseDataSource.js 的读取传输功能> 只是对我的 gridOptions 中新创建的 fbDataSource 进行简单引用。

最佳答案

$firebaseArray 是一个仅存在于 Angular 中的概念,因为它是可注入(inject)的。您无法创建函数并将其传入以进行定义。您必须使用 native firebase 调用,因为它们暴露在窗口上。

要获取数据,您必须使用如下内容:

firebase.database().ref(...).on('value', function(snapshot){
    console.log(snapshot.val());
})

您可以在此处阅读有关如何使用它的文档:https://firebase.google.com/docs/database/web/read-and-write#read_data_once

如果你需要注入(inject),你必须在指令中创建你的kendoUi,然后你可以用这种方式注入(inject)。

.directive(..., function(){
    return {
        ...
        controller: function($firebaseArray){
            //kendo code here
        }
    }
})

关于javascript - 如何从自定义 Kendo UI 数据源访问 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193384/

相关文章:

javascript - 如何在ng-repeat中显示json的可变键值?

javascript - Angularjs:对图表的数组元素求和

android - 在代码中保存 Firebase 引用的最佳方式

javascript - 将参数传递给 jQuery 删除按钮单击事件处理程序

javascript - MySQL:使用不同的查询,然后将相同的表过滤与其结果连接起来

javascript - 在 Razor 中将小数字段显示为 Int

javascript - AG-GRID & AngularJS - 如何在外部编辑数据

android - Firebase 显示错误的用户数量(因为我的应用未发布)

ios - 在 iOS 的 ViewController 中访问 FIRUser

javascript - jquery html() 仅给出每个 () 方法使用的第一个值