GOOGLE ADS

пятница, 13 мая 2022 г.

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В поле addColumn, где я помещаю параметр удаления, идентификатор возвращает только одну запись, а не конкретный идентификатор каждого столбца.

Вот мой код контроллера

public function fetchData($manifest_no){
$hwb_data = DB::table('hwb')
->join('manifest_records', 'hwb.id', '=', 'manifest_records.hwb_id')
->join('consignees', 'consignees.id', '=', 'hwb.client_id')
->where('manifest_records.manifest_no', $manifest_no)
->get();

return Datatables::of($hwb_data)
->addIndexColumn()
->addColumn('action', function($row){
$idx = $row->id;
$btn = "<a href='javascript:void(0)' id='delete' data-id='$idx' class='edit btn btn-danger btn-sm'>$idx</a>";
return $btn;
})
->rawColumns(['action'])
->make(true);
}

Вот рендеринг Datatable

$(function () {
let table = $('#tableSample').DataTable({
processing: true,
serverSide: true,
ajax: "{{ url("/fetchData/$manifest_no") }}",
columns: [
{data: 'id', name: 'id', 'visible': false},
{data: 'created_at', name: 'created_at'},
{data: 'hwb_no', name: 'hwb_no'},
{data: 's_name', name: 's_name'},
{data: 'c_name', name: 'c_name'},
{data: 'destination', name: 'destination'},
{data: 'dr_no', name: 'dr_no'},
{data: 'commodity', name: 'commodity'},
{data: 'actual_weight', name: 'actual_weight'},
{data: 'tp_cbm', name: 'tp_cbm'},
{data: 'action', name: 'action', orderable: false, searchable: false},
]
});

$("#tableReload").delegate('#delete', 'click', function (e) {
e.preventDefault();
let id = $(this).data('id');
console.log(id);
})
});

Всякий раз, когда я визуализирую данные, я всегда сталкиваюсь с этой проблемой. Кнопка действия всегда имеет значение 2

введите описание изображения здесь


Решение проблемы

Я предполагаю, что вам нужно использовать функцию рендеринга, а не бэкэнд-функцию.

Также попробуйте сбросить $rowи dd перед визуализацией представления, просто чтобы убедиться, что $row имеет правильные значения, которые вы ожидаете!

$(function () {
let table = $('#tableSample').DataTable({
processing: true,
serverSide: true,
ajax: "{{ url("/fetchData/$manifest_no") }}",
columns: [
{data: 'id', name: 'id', 'visible': false},
{data: 'created_at', name: 'created_at'},
{data: 'hwb_no', name: 'hwb_no'},
{data: 's_name', name: 's_name'},
{data: 'c_name', name: 'c_name'},
{data: 'destination', name: 'destination'},
{data: 'dr_no', name: 'dr_no'},
{data: 'commodity', name: 'commodity'},
{data: 'actual_weight', name: 'actual_weight'},
{data: 'tp_cbm', name: 'tp_cbm'},

{ data: 'id',
name: 'action',
orderable: false,
searchable: false,
"render": function ( data, type, row, meta ) {
return '<button class="delete btn btn-danger" data-id="'+ data +'"> Delete </button>'
}},
]
});

});

Как прокрутить контейнер, чтобы скрыть его внутри другого контейнера?

пожалуйста, как мне прокрутить контейнер, чтобы он выглядел так же, как на изображении ниже. я не хочу, чтобы контейнер прятался за другим контейнером. я хочу, чтобы контейнер прокручивался в другой контейнер, когда вы его прокручиваете. я уже знаю об использовании gridbox, но я хочу иметь возможность работать с одним контейнером, а не с несколькими контейнерами, которые позволяет вам использовать сетка. поэтому в основном я хочу создать один большой контейнер, в котором будет отображаться содержимое моей страницы. затем контейнер прокручивается прямо под заголовком без перемещения заголовка. Я хочу, чтобы заголовок страницы отображался там, где находится зеленая рамка с белой рамкой. Спасибо

введите описание изображения здесь

введите описание изображения здесь


Решение проблемы

Вы можете использовать стек для достижения этой цели. Ниже код имеет ту же идею, что и желаемый результат.

 import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
const MyApp({Key? key}): super(key: key);

static const String _title = 'Flutter Code Sample';

@override
Widget build(BuildContext context) {
return const MaterialApp(
title: _title,
home: MyStatelessWidget(),
);
}
}

class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key? key}): super(key: key);

@override
Widget build(BuildContext context) {
return Stack(children: [



Positioned(
top: 0,
left: 0,
right: 0,
child: Container(
color: Colors.green,
height: 150,
width: double.infinity,
child: Center(
child: Container(
height: 30,
width: 100,
color: Colors.green,
),
),
),
), Padding(
padding: const EdgeInsets.all(8.0),
child: ListView(
children: [
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.blue,
),
const SizedBox(height: 20),
Container(
height: 50,
width: 50,
color: Colors.red[300],
),
],
),
),
Positioned(
top: 0,
left: 0,
right: 0,
child: Container(
color: Colors.green,
height: 80,
width: double.infinity,
child: Center(
child: Container(
height: 30,
width: 100,
color: Colors.black,
),
),
),
),
]);

}
}

Как я могу сделать RecyclerView с MVVM

Я пытаюсь сделать recyclerView с помощью mvvm, но в результате получаю пустой recyclerView, помогите, пожалуйста! кт файл:

typeRecy = itemView.findViewById(R.id.typeRecy)
typeRecy.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
typeRecy.setHasFixedSize(true)
typeVM = ViewModelProvider(this)[TypeViewModel::class.java]
typeVM.typeCard.observe(viewLifecycleOwner, Observer {
typeVM.setList()
typeRecy.adapter = recyclerAdapter(it)
})

видМодель:

class TypeViewModel: ViewModel() {

//
private lateinit var typeList: ArrayList<TypeCard>
lateinit var bgType: Array<Int>
lateinit var nameType: Array<String>
var typeCard = MutableLiveData<ArrayList<TypeCard>>()
fun setList(){
bgType= arrayOf(R.drawable.group_1,R.drawable.group_3,R.drawable.group_4,R.drawable.group_2,R.drawable.group_5,R.drawable.group_8)
nameType= arrayOf("Pizza", "Tacos", "Salads","Burgers","Soups", "Drinks")
typeList = arrayListOf()
putTypeData()
//
}
fun putTypeData() {
for(i in nameType.indices){
val type = TypeCard(nameType[i], bgType[i])
typeList.add(type)
}
typeCard.value = typeList
}

}


Решение проблемы

Во-первых, не пересоздавайте свой адаптер каждый раз, когда получаете новые данные. Просто создайте экземпляр onCreate с пустым списком.

typeRecy = itemView.findViewById(R.id.typeRecy)
typeRecy.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
typeRecy.setHasFixedSize(true)
val recyclerAdapter = recyclerAdapter(emptyList())
typeRecy.adapter = recyclerAdapter
typeVM = ViewModelProvider(this)[TypeViewModel::class.java]

Во-вторых, вам не нужны две переменные (typeCard и typeList), а только одна из них, которая будет MutableLiveData:

class TypeViewModel: ViewModel() {

val typeCard = MutableLiveData<ArrayList<TypeCard>>()
fun setList() {
arrayOf(
"Pizza" to R.drawable. group_1,
"Tacos" to R.drawable. group_3,
"Salads" to R.drawable. group_4,
"Burgers" to R.drawable. group_2,
"Soups" to R.drawable. group_5,
"Drinks" to R.drawable. group_8
).map { (nameType, backgroundType) ->
TypeCard(nameType, backgroundType)
}.let(typeCard::postValue)
}

}

Наконец, во фрагменте вам просто нужно наблюдать за typeCardLiveData и в вашем адаптере иметь метод для обновления списка и НЕ вызывать setList каждый раз.


typeRecy = itemView.findViewById(R.id.typeRecy)
typeRecy.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
typeRecy.setHasFixedSize(true)
val recyclerAdapter = recyclerAdapter(emptyList())
typeRecy.adapter = recyclerAdapter
typeVM = ViewModelProvider(this)[TypeViewModel::class.java]
typeVM.setList()
typeVM.typeCard.observe(viewLifecycleOwner, Observer {
recyclerAdapter.updateList(it)
})

Скомпилируйте папку с файлами .java и заархивируйте ее.

Я пытаюсь понять, как скомпилировать папку с исходными файлами Java. Существует структура папок (корневые папки — org.AppName.i18n и META-INF). В конце концов мне нужно получить Jar с той же структурой, а.java конвертируется в.class. Любые подсказки, как это сделать? Я на Windows.


Решение проблемы

Для этого вы можете использовать Ant: http://ant.apache.org/

Аргумент шаблона зависит от использования/объявления typedef

Как я могу написать using(или typedef) объявление, которое зависит от аргумента шаблона? Я хотел бы добиться чего-то вроде этого:

template<typename T>
class Class
{
// T can be an enum or an integral type
if constexpr (std::is_enum<T>::value) {
using Some_type = std::underlying_type_t<T>;
} else {
using Some_type = T;
}
};

Решение проблемы

Именно std::conditionalдля этого:

template <class T>
class Class
{
using Some_type = typename std::conditional_t<std::is_enum<T>::value, std::underlying_type<T>, std::type_identity<T>>::type;
};

std::type_identityиз С++ 20, который, если у вас его нет, легко воспроизвести самостоятельно:

template< class T >
struct type_identity {
using type = T;
};

Это необходимо, поскольку std::underlying_type<T>::typeне существует, если Tне является перечислением и std::conditionalне может предотвратить выполнение этой оценки.

Add notification to Windows notification center without displaying it on screen

Я создаю приложение Electron с настраиваемой функцией уведомлений, в которой элементы div html5 появляются и исчезают по мере необходимости в бескаркасном прозрачном окне всегда поверх.

Это прекрасно работает, но: мне по-прежнему нравится сам центр уведомлений Windows, и я хотел бы иметь возможность просматривать там прошлые уведомления, фактически не отображая их на экране с API HTML5.

Я пытался:

  • Поиск в HTML5 API для возможности не показывать уведомление или сразу.hide() его: не повезло. Единственный близкий метод —.close(), и он также удаляет уведомление из центра.

  • Изучая такие пакеты, как node-notifier, ни одна из используемых зависимостей уведомлений не предлагает способ полностью скрыть уведомление.

  • Хотя я упомянул Node, я также приму любой API/привязку более низкого уровня, который позволит мне это сделать.

    Заранее спасибо.


    Решение проблемы

    С помощью @treckstar в комментариях я нашел способ сделать то, что хотел, используя:

  • NodeRT

  • Атрибут ToastNotification.SuppressPopup _

  • Несмотря на несколько проблем со сборкой NodeRT и использованием электронной перестройки, вот работающий PoC:

    const { XmlDocument } = require('@nodert-win10-rs4/windows.data.xml.dom');
    const {
    ToastNotification,
    ToastNotificationManager
    } = require('@nodert-win10-rs4/windows.ui.notifications');
    const localImage = path.join(__dirname, 'icon.png');
    const template = `
    <toast launch="app-defined-string">
    <visual>
    <binding template="ToastGeneric">
    <image id="1" placement="appLogoOverride" hint-crop="circle" src="${localImage}"/>
    </binding>
    </visual>
    </toast>
    `;
    const xml = new XmlDocument();
    xml.loadXml(template);
    const toast = new ToastNotification(xml);
    const notifier = ToastNotificationManager.createToastNotifier("com.myapp.testnotif");
    toast.suppressPopup = true;
    notifier.show(toast);

    Пусть это поможет тому, кто столкнется с той же очень конкретной проблемой.

    Teamcity — CI/CD — iOS — xcodebuild — подписывание — сертификат подписи «Разработка iOS» не найден

    У меня Teamcity установлен с агентом на MAC. Когда я пытаюсь создать проект iOS, у меня возникает эта ошибка:

    error: No signing certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID "#######" with a private key was found. (in target 'App' from project 'App').

    Я использую эту командную строку:

    /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -workspace ios/App/App.xcworkspace -scheme App clean build

    Я проверил команду в терминале прямо на Mac, и она работает! Мои сертификаты находятся в связке ключей в сеансе пользователя, который запускает агент Teamcity.

    Я попытался поместить сертификат в другую цепочку для ключей и предоставить доступ к процессу, который выполняется Teamcity, с помощью этой команды:

    security unlock-keychain -p [password] ~/Library/Keychains/teamcity.keychain-db

    Любые идеи?


    Решение проблемы

    Удалось решить это. Проблема заключалась в том, что по какой-то причине teamcity просматривал системный брелок и, конечно же, ничего не нашел. Добавление сертификата в системную связку ключей решило эту проблему.

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...